examples biblioteca array c++ arrays c++11 initialization std

examples - biblioteca array c++



C++ 11: Corregir la inicialización de std:: array? (2)

De acuerdo con cppreference . Se requieren llaves dobles solo si = se omite.

// construction uses aggregate initialization std::array<int, 3> a1{ {1,2,3} }; // double-braces required std::array<int, 3> a2 = {1, 2, 3}; // except after = std::array<std::string, 2> a3 = { {std::string("a"), "b"} };

Si inicializo un std :: array de la siguiente manera, el compilador me da una advertencia acerca de los paréntesis faltantes

std::array<int, 4> a = {1, 2, 3, 4};

Esto soluciona el problema:

std::array<int, 4> a = {{1, 2, 3, 4}};

Este es el mensaje de advertencia:

missing braces around initializer for ''std::array<int, 4u>::value_type [4] {aka int [4]}'' [-Wmissing-braces]

¿Es esto solo un error en mi versión de gcc, o se hace intencionalmente? Si es así, ¿por qué?


Esta es la implementación std::array de std::array :

template<typename T, std::size_t N> struct array { T __array_impl[N]; };

Es una estructura agregada cuyo único miembro de datos es una matriz tradicional, de modo que el {} interno se usa para inicializar la matriz interna.

La elisión de la abrazadera está permitida en ciertos casos con inicialización agregada (pero generalmente no se recomienda), por lo que solo se puede usar una abrazadera en este caso. Vea aquí: C ++ vector de matrices