O que as seguintes frases significam em C ++:
inicialização zero,
inicialização padrão e
inicialização de valor
O que um desenvolvedor de C ++ deve saber sobre eles?
c++
initialization
c++-faq
Conta
fonte
fonte
Respostas:
Uma coisa a perceber é que a 'inicialização de valor' é nova no padrão C ++ 2003 - ela não existe no padrão original de 1998 (acho que pode ser a única diferença que é mais do que um esclarecimento). Veja a resposta de Kirill V. Lyadvinsky para as definições diretamente do padrão.
Consulte esta resposta anterior sobre o comportamento de
operator new
para obter detalhes sobre os diferentes comportamentos desse tipo de inicialização e quando eles entram em ação (e quando diferem de c ++ 98 para C ++ 03):O ponto principal da resposta é:
Para dizer o mínimo, é bastante complexo e quando os diferentes métodos são sutis.
Certamente, é importante estar ciente de que o MSVC segue as regras do C ++ 98, mesmo no VS 2008 (VC 9 ou cl.exe versão 15.x).
O seguinte snippet mostra que o MSVC e o Digital Mars seguem as regras do C ++ 98, enquanto o GCC 3.4.5 e o Comeau seguem as regras do C ++ 03:
fonte
int
, masm()
na terceira linha o valor inicializa m. Importante se você mudarint m;
paraB m;
. :)A
eC
não são usados neste exemplo (eles são herdados da outra resposta vinculada). Embora o C ++ 98 e o C ++ 03 usem terminologia diferente ao descrever comoA
eC
são construídos, o resultado é o mesmo nos dois padrões. Apenasstruct B
resulta em comportamento diferente.struct C { C() : m() {}; ~C(); B m; };
, você terám.m
0. Mas, se inicializarm
como padrão, como você diz C ++ 03,m.m
não será inicializado como em C ++ 98.Padrão C ++ 03 8.5 / 5:
fonte