2009-12-19 4 views
0

On m'a dit qu'il y a plusieurs situations dans lesquelles la liste d'initialisation doit être utilisée pour l'initialisation.une question sur la liste d'initialisation en C++

Il y a trois cas

1) membres const

2) membres de référence

3) sans constructeur par défaut

Est-ce exact? Quelqu'un voudrait-il élaborer ceci? Y a-t-il un autre cas que j'ai manqué?

Merci!

Répondre

2

... ou les types de classe POD ou les tableaux de types de classe POD qui contiennent eux-mêmes directement ou indirectement un membre qualifié const. Mais oui, les vôtres sont les cas principaux.

Pour votre (3), ceci s'applique uniquement s'il existe des constructeurs déclarés par l'utilisateur autres qu'un constructeur par défaut. S'il n'y a aucun constructeur déclaré par l'utilisateur, alors le membre peut être initialisé par défaut s'il n'est pas mentionné dans la liste d'initialisation.

+0

pouvez-vous me montrer un exemple de code pour le cas 3? Merci beaucoup! – skydoor

+0

Que voulez-vous dire? Code qui compile avec un membre de type classe qui n'a aucun constructeur ou code qui ne le fait pas parce que le type de classe a un constructeur non-défaut? –

+0

Je pense que le code qui ne fonctionne pas parce que le type de classe a un constructeur non-défaut? – skydoor

0

Oui, vous avez raison.

Il est également utilisé pour initialiser les membres de données de classe de base en cas d'héritage.

+0

que diriez-vous de membre statique? – skydoor

+0

l'initialisation du membre statique doit être effectuée au moment de sa définition ou utiliser la fonction statique pour ce faire plutôt que la liste d'initialisation. – Ashish