zero-initialize
-
Abend,
struct S{ int i; }; int main() { S s; std::cout << s.i; // irgendetwas std::cout << S().i; // 0 }
Ich verstehe gerade nicht, wieso das Datenelement des temporären Objekts mit 0 initialisiert wird. Was ist da der Hintergrund? Ich finde die entsprechende Stelle im Draft momentan nicht (falls jemand die Stelle parat hat, bitte posten).
Danke im Voraus.
-
Möglicherweise einfach Zufall?
-
Ethon schrieb:
Möglicherweise einfach Zufall?
Ne :p Chandler Carruth erklärt es am Ende seines Vortrags (ab 50 Min.), aber ich kann ihm nicht ganz folgen.
-
8.5.10: An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
8.5.7 To value-initialize an object of type T means:
— if T is a (possibly cv-qualified) class type (Clause 9) with a user-provided constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default
constructor);
— if T is a (possibly cv-qualified) non-union class type without a user-provided constructor, then the object is zero-initialized and, if T’s implicitly-declared default constructor is non-trivial, that constructor is
called.
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized.8.5.5 To zero-initialize an object or reference of type T means:
— if T is a scalar type (3.9), the object is set to the value 0 (zero), taken as an integral constant expression, converted to T
— if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class
subobject is zero-initialized and padding is initialized to zero bits;#include <iostream> struct S{ int i; }; struct T{ int i; public: T() {} }; int main() { S s; std::cout << s.i << "\n"; // irgendetwas std::cout << S().i << "\n"; // 0 T t; std::cout << t.i << "\n"; // irgendetwas std::cout << T().i << "\n"; // irgendetwas }
// edit: Yeah, endlich wieder mal was g'lernt
-
Danke für die entsprechenden Textstellen Swordfish, jetzt habe ich es auch verstanden.