Ich habe einen Konstruktor, der einige Argumente akzeptiert. Ich hatte angenommen, dass sie in der angegebenen Reihenfolge konstruiert wurden, aber in einem Fall scheint es, dass sie in umgekehrter Reihenfolge konstruiert wurden, was zu einem Abbruch führte. Als ich die Argumente umkehrte, hörte das Programm auf abzubrechen. Dies ist ein Beispiel für die von mir verwendete Syntax. Die Sache ist, dass a_ in diesem Fall vor b_ initialisiert werden muss. Können Sie die Bauordnung garantieren?
z.B
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Antworten:
Dies hängt von der Reihenfolge der Deklaration der Mitgliedsvariablen in der Klasse ab. So
a_
wird der erste sein, dannb_
wird der zweite in Ihrem Beispiel sein.quelle
-Wreorder
in gcc.Um den Standard zur Verdeutlichung zu zitieren:
quelle
Die Standardreferenz hierfür scheint nun 12.6.2 Abschnitt 13.3 zu sein:
quelle