length arreglos array c++ c++11 stdarray

arreglos - dynamic array c++



¿Está std:: array<int, 10> como miembro de clase inicializado en cero? (2)

Es c.stdArr cero inicializado?

¿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:

  1. Es c.stdArr cero inicializado?
  2. ¿Si es así por qué?

Mis propias respuestas contradictorias:

  1. Es cero inicializado: std::array quiere comportarse como un c-array. Si en mi ejemplo anterior, stdArr fuera un c-array, stdArr() inicializaría en stdArr() en la lista de inicialización. Espero que el member() escritura member() dentro de una lista de inicialización inicialice el objeto.

  2. No es cero inicializado:

    • std::array normalmente tiene un solo miembro, que en mi caso es int[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()