In questo caso non fa differenza.
ma può essere utile per farlo.
Se si dispone di un gran numero di membri poi avere qualche ma non tutti i membri nella lista possono causare una certa confusione. Inoltre, rafforza nella tua mente l'ordine di inizializzazione (l'ordine è definito dall'ordine di dichiarazione nella classe, ma può essere utile visualizzare questo ordine in classi più grandi dove non tutte le variabili membro sono dichiarate l'una accanto all'altra).
Nota: se li si inserisce nell'ordine errato nella lista internalizer, di solito questo è solo un avvertimento sulla maggior parte dei compilatori (a meno che non si compili con gli avvisi come errori (che si dovrebbe)).
Il vero pericolo è rappresentato dalle classi che dispongono di un membro POD e di un costruttore generato dal compilatore.
class NewFoo
{
int x;
int y;
};
// Version 1:
class Bar1
{
NewFoo f;
};
// Version 2:
class Bar2
{
NewFoo f;
public:
Bar2() // f not in list.
{}
};
// Version 3:
class Bar3
{
NewFoo f;
public:
Bar3()
: f()
{}
};
int main()
{
Bar1 b1a; // x and y not initialized.
Bar1 b1b = Bar1(); // x and y zero initialized.
Bar2 b2a; // x and y not initialized.
Bar2 b2b = Bar2(); // x and y not initialized.
Bar3 b3a; // x and y zero initialized.
Bar3 b3b = Bar3(); // x and y zero initialized.
}
fonte
2012-11-05 18:58:17
'_foo' è già inizializzare (usando costruttore di default di foo) dalla dichiarazione' Foo _foo; 'Se si vuole ri-inisialize' _foo' usare 'Bar(): _foo (Foo()) {} '. Tuttavia, questo sarebbe inutile. – andre
@ahenderson: non è corretto. '_foo' è inizializzato nella lista di inizializzazione. Questo è l'unico e unico luogo in cui i membri sono inizializzati in una classe. 'Bar(): _foo (Foo()) {}' non * re-initialize * '_foo' - it ** lo inizializza ** it. –
@JohnDibling oh, mi sono sbagliato. Capisco ora dalla lettura della risposta di Kerrek SB. – andre