++fab a écrit :
En fait mon poste précédent est largement incomplet. La zéro-initialisation dépend de plusieurs choses : de la classe de stockage, de la présence d'un new-initialiser "()", et de savoir si c'est un POD ou non.
- Si la classe de stockage est static, il y a zéro-initialisation.
- Sinon si il y a un new-initialiser, cela conduit à une value-initialisation. En simplifiant un peu, cela conduit ensuite à une zéro-initialisation de l'objet.
- Sinon, s'il n'y a pas de new-initialiser (comme c'est le cas pour la construction d'un objet de classe de stockage automatique), ça dépend si la classe est un POD ou non. Si le type est de class type et n'est pas un POD, il y a default-initialization, qui mène immédiatement à une zéro-initialization si on parle de classes sans constructeurs déclarés explicitement.
Sinon, il n'y a pas d'initialisation, et les valeurs sont indéterminées. (exception faite des aggregates automatiques, ... enfin bref)
Voila, j'ai essayé de recombiner pas mal de chapitres de la norme en résumant, j'espère ne pas trop m'etre trompé, à défaut d'avoir été complètement exhaustif.
|