"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o GCC falha ao inicializar std::array com listas de inicialização?

Por que o GCC falha ao inicializar std::array com listas de inicialização?

Publicado em 19/11/2024
Navegar:310

Why Does GCC Fail to Initialize std::array with Initialization Lists?

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.

Tutorial mais recente Mais>

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