¿Qué significan las siguientes frases en C ++:
inicialización cero,
inicialización predeterminada y
inicialización de valor
¿Qué debe saber un desarrollador de C ++ sobre ellos?
c++
initialization
c++-faq
Cuenta
fuente
fuente
Respuestas:
Una cosa a tener en cuenta es que la 'inicialización del valor' es nueva con el estándar C ++ 2003: no existe en el estándar original de 1998 (creo que podría ser la única diferencia que es más que una aclaración). Ver la respuesta de Kirill V. Lyadvinsky para las definiciones directamente del estándar.
Consulte esta respuesta anterior sobre el comportamiento de
operator new
para obtener detalles sobre el comportamiento diferente de este tipo de inicialización y cuándo entran en acción (y cuando difieren de c ++ 98 a C ++ 03):El punto principal de la respuesta es:
Por decir lo menos, es bastante complejo y cuando los diferentes métodos entran en juego son sutiles.
Una cosa a tener en cuenta es que MSVC sigue las reglas de C ++ 98, incluso en VS 2008 (VC 9 o cl.exe versión 15.x).
El siguiente fragmento muestra que MSVC y Digital Mars siguen las reglas de C ++ 98, mientras que GCC 3.4.5 y Comeau siguen las reglas de C ++ 03:
fuente
int
, perom()
en la tercera línea el valor inicializa m. Importante si cambiasint m;
aB m;
. :)A
yC
no se usan en este ejemplo (se transfieren de la otra respuesta vinculada). Aunque C ++ 98 y C ++ 03 usan una terminología diferente al describir cómoA
yC
se construyen, el resultado es el mismo en ambos estándares. Solostruct B
da como resultado un comportamiento diferente.struct C { C() : m() {}; ~C(); B m; };
, entonces tendrám.m
0. Pero si se inicializa por defectom
como dice C ++ 03, entoncesm.m
no se inicializaría como en C ++ 98.C ++ 03 Estándar 8.5 / 5:
fuente