Ich lese C++ 11 Norm-Entwurf (N3242 Revision) und stieß auf auf folgende Aussage:Bezug Mitglied vor der Ausführung von nicht trivial Konstruktor
(12,7 Bau und Zerstörung). Bei einem Objekt mit einem nicht-trivialen Konstruktor führt die Bezugnahme auf ein beliebiges nicht-statisches Element oder eine Basisklasse des Objekts vor Beginn der Ausführung des Konstruktors zu nicht definiertem Verhalten.
Wie ich folgende Standardkonstruktors von Foo
Endnutzer besser verstehen Verhalten nicht definiert (in Stück Code i(&a.i)
? Constructor von Foo
nicht trivial ist (weil es benutzerdefiniert) und ich beziehe mich auf Mitglied a
vor der Ausführung von Konstruktor.
struct A
{
int i;
};
struct Foo
{
A a;
int* i;
Foo() : a(), i(&a.i)
{}
};
UPD: vielleicht Nutzung Mitglied des Typs int*
nicht so informativ ist (Typ int
ist besser geeignet zum Beispiel)
_ "Ich beziehe mich auf Mitglied a vor der Ausführung des Konstruktors." _ Nein, bist du nicht. Du hast es nur mit 'a()' konstruiert. 'a.i' ist nicht initialisiert, aber die Adresse ist OK. –
Was ist mit Member 'i' vom Typ' int'? Ist es okay? Ich kann die Bedeutung einer solchen Aussage von C++ nicht verstehen 11 – LmTinyToon
@underscore_d, können Sie bitte Beispiele für falsche Angaben geben? Es verwirrt mich wirklich – LmTinyToon