2016-04-13 2 views
1

Wenn ich ein struct wie dieses:Ich möchte anfangen, C++ Inline-Initialisierung zu verwenden, gibt es irgendwelche schlimmen Fälle dafür?

struct A 
{ 
    int i; 
    double d; 
    const bool b; 
}; 

Und ich tue dies: A a; dann bekomme ich nicht-Wert initialisiert Objekt, das heißt i kann 6 sein, d kann eine andere Sache sein btrue sein kann. Um dies zu vermeiden, möchte ich Folgendes tun:

struct A 
{ 
    int i = 0; 
    double d = 0.0; 
    const bool b = false; 
}; 

Gibt es etwas Schlechtes, diesen Ansatz als Faustregel zu verwenden? Vielleicht kennen Sie einen Fall, wenn das nicht wünschenswert ist?

+1

Ich denke, die Erstellung von Standardkonstruktor für Struktur ist relevanter. 'struct A { int i; doppelt d; const bool b; A() {i = 0; d = 0,0; b = falsch; } }; ' –

+0

Es ist nicht das Problem hier, aber Sie sollten die Mitglieder Deklarationen nach Größe bestellen – Pierre

+1

@vidhugangwar: Der Konstruktor macht die Struktur *** Nicht-POD ***, die in einigen Anwendungsfällen unerwünscht sein kann. – Nawaz

Antwort

4
struct A 
{ 
    int i = 0; 
    double d = 0.0; 
    const bool b = false; 
}; 

ist korrekt und prägnant.

+0

In C++ 11 'A() = default;' 'immer noch 'A' ein Aggregat-Typ. – Narek

+0

@Narek: 'A() = Standard'; würde die Mitglieder nicht (Null-) initialisieren. – Nawaz

0

Sie können dies tun, indem Sie Initialisierungsliste im Konstruktor verwenden.

struct A 
{ 
    int i; 
    double d; 
    const bool b; 

    A(int i, double d, bool b) : i(i), d(d), b(b){} 
}; 
Verwandte Themen