Ich debugge einen Code, der im Wesentlichen mit diesem identisch ist:
struct Foo { int a; int b; };
struct Bar { Bar() {} Foo foo{0}; };
Wenn ich eine Instanz von mache Bar
, scheint es wie beides a
und b
wird auf Null initialisiert. Ist das garantiert? Wo finde ich das in der Spezifikation?
c++
initialization
XPlatformer
quelle
quelle
struct Foo { int a{}; int b{}; };
Beachten Sie die zusätzlichen Klammern nach den Variablennamen. dann erhalten Sie immer initialisierte Werte. Wenn Sie mit anderen Werten und mit definiertem Verhalten beginnen müssen, müssen Sie einen Ctor wie für jede andere Klasse schreibenAntworten:
Laut cppreference.com
Foo
hat keine Standard-Member-Initialisierer (int b{0};
) undb
wird daher durch Listeninitialisierung mit einer leeren Liste initialisiert. Dies bedeutet Wertinitialisierung für Nicht-Klassentypen :b = int() // = 0
.quelle