Que signifient les phrases suivantes en C ++:
zéro-initialisation,
initialisation par défaut, et
initialisation de la valeur
Que doit savoir un développeur C ++ à leur sujet?
c++
initialization
c++-faq
Facture
la source
la source
Réponses:
Une chose à réaliser est que «l'initialisation de la valeur» est nouvelle avec la norme C ++ 2003 - elle n'existe pas dans la norme originale de 1998 (je pense que c'est peut-être la seule différence qui est plus qu'une clarification). Voir la réponse de Kirill V. Lyadvinsky pour les définitions directement issues de la norme.
Voir cette réponse précédente sur le comportement de
operator new
pour plus de détails sur les différents comportements de ces types d'initialisation et quand ils se déclenchent (et quand ils diffèrent de C ++ 98 à C ++ 03):Le point principal de la réponse est:
Pour dire le moins, c'est plutôt complexe et quand les différentes méthodes entrent en jeu sont subtiles.
Il faut certainement savoir que MSVC suit les règles du C ++ 98, même dans VS 2008 (VC 9 ou cl.exe version 15.x).
L'extrait suivant montre que MSVC et Digital Mars suivent les règles C ++ 98, tandis que GCC 3.4.5 et Comeau suivent les règles C ++ 03:
la source
int
, maism()
sur la troisième ligne, la valeur initialise m. Important si vous passezint m;
àB m;
. :)A
etC
ne sont pas utilisés dans cet exemple (ils sont reportés de l'autre réponse liée). Même si C ++ 98 et C ++ 03 utilisent une terminologie différente pour décrire commentA
etC
sont construits, le résultat est le même dans les deux normes. Il enstruct B
résulte seulement un comportement différent.struct C { C() : m() {}; ~C(); B m; };
, alors vous aurezm.m
la valeur 0. Mais s'il était initialisé par défautm
comme vous le dites C ++ 03, alors ilm.m
ne serait pas initialisé comme dans C ++ 98.Norme C ++ 03 8.5 / 5:
la source