De acordo com cppreference.com
Se o número de cláusulas do inicializador for menor que o número de membros [e bases (desde C ++ 17)] ou a lista de inicializadores estiver completamente vazia, os membros restantes [e bases (desde C ++ 17)] serão inicializados [por seus inicializadores de membros padrão, se fornecidos na definição de classe e de outra forma (desde C ++ 14)] por listas vazias, de acordo com as regras usuais de inicialização de lista (que executa a inicialização de valor para tipos que não são de classe e classes não agregadas) com construtores padrão e inicialização agregada para agregados). Se um membro de um tipo de referência for um desses membros restantes, o programa será mal formado.
Foo
inicializadores não tem membro padrão ( int b{0};
), então b
serão inicializados por uma lista-de inicialização com uma lista vazia, o que significa valor de inicialização para tipos não-classe: b = int() // = 0
.
struct Foo { int a{}; int b{}; };
lembre-se das chaves extras após os nomes das variáveis. você sempre obterá valores inicializados. se você precisa para o init com outros valores, com comportamento definido, você precisa escrever um ctor como para uma todas as outras classes