Listas de inicialización y std::array: un error de GCC
La clase std::array en la biblioteca estándar de C proporciona una contenedor de matriz de tamaño. Se cree comúnmente que esta clase admite listas de inicialización.
Sin embargo, al utilizar GCC 4.6.1, los intentos de inicializar instancias std::array usando la siguiente sintaxis fallan:
std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });
A pesar de que las listas de inicialización funcionan con std::vector, este comportamiento con std::array ha aumentado preguntas sobre el estándar C o un posible problema de GCC.
funcionamiento interno de std::array
std::array es esencialmente una estructura que encapsula una matriz. Su estructura se parece a:
template
struct std::array {
T a[size];
};
A diferencia de std::vector, que tiene un constructor que acepta listas de inicializadores, std::array carece de dicho constructor.
Inicialización agregada
Aunque std::array no tiene un constructor explícito para las listas de inicialización, se considera un tipo agregado en C 11. Como tal, se puede inicializar de forma agregada. Sin embargo, para inicializar la matriz dentro de la estructura, se requiere un conjunto adicional de llaves:
std::array<:string> strings = {{ "a", "b" }};
Posible error de GCC
El estándar C permite la omisión de llaves adicionales en dicha inicialización. Por lo tanto, es probable que la incapacidad de GCC para manejar esta sintaxis sin ellos sea un error.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3