arreglos - dynamic array c++
¿Está std:: array<int, 10> como miembro de clase inicializado en cero? (2)
Es
c.stdArr
cero inicializado?
Sí
¿Si es así por qué?
Esto realiza una inicialización de valor de stdArr
:
MyClass() : stdArr() {}
En este contexto, el efecto de la inicialización del valor es una inicialización cero del objeto.
Edición : hay mucha información relevante en ¿Qué son los agregados y los POD ...?
Esta pregunta ya tiene una respuesta aquí:
struct MyClass
{
std::array<int, 10> stdArr;
MyClass() : stdArr()
{}
};
MyClass c;
Preguntas:
- Es
c.stdArr
cero inicializado? - ¿Si es así por qué?
Mis propias respuestas contradictorias:
Es cero inicializado:
std::array
quiere comportarse como un c-array. Si en mi ejemplo anterior,stdArr
fuera un c-array,stdArr()
inicializaría enstdArr()
en la lista de inicialización. Espero que elmember()
escrituramember()
dentro de una lista de inicialización inicialice el objeto.No es cero inicializado:
-
std::array
normalmente tiene un solo miembro, que en mi caso esint[10] _Elems;
- Normalmente, los tipos fundamentales y las matrices de tipos fundamentales como
int[N]
no están inicializados por defecto. -
std::array
es un tipo agregado que implica que está construido por defecto. - Debido a que no hay un constructor personalizado que inicialice
_Elems
, creo que no está inicializado en cero.
-
¿Cuál es el comportamiento correcto de std::array
según el estándar C ++ 11?
"std :: array quiere comportarse como un c-array" no es como el estándar describe el comportamiento. Es un tipo definido por el usuario, y los miembros de los tipos definidos por el usuario se inicializan llamando a su constructor, es decir, array<int,10>::array()