Listas de inicialização e std::array: um bug do GCC
A classe std::array na Biblioteca Padrão C fornece uma solução fixa- contêiner de matriz de tamanho. É comumente acreditado que esta classe suporta listas de inicialização.
No entanto, usando o GCC 4.6.1, as tentativas de inicializar instâncias std::array usando a seguinte sintaxe falham:
std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });
Apesar das listas de inicialização funcionarem com std::vector, esse comportamento com std::array gerou perguntas sobre o padrão C ou um possível problema do GCC.
funcionamento interno do std::array
std::array é essencialmente uma estrutura que encapsula um array. Sua estrutura se assemelha a:
template
struct std::array {
T a[size];
};
Ao contrário de std::vector, que tem um construtor que aceita listas de inicializadores, std::array não possui tal construtor.
Inicialização agregada
Embora std::array não tenha um construtor explícito para listas de inicialização, ele é considerado um tipo agregado em C 11. Como tal, pode ser inicializado de forma agregada. No entanto, para inicializar a matriz dentro da estrutura, é necessário um conjunto adicional de chaves:
std::array<:string> strings = {{ "a", "b" }};
Bug potencial do GCC
O padrão C permite a omissão de chaves extras em tal inicialização. Portanto, é provável que a incapacidade do GCC de lidar com essa sintaxe sem eles seja um bug.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3