Saya memiliki konstruktor yang memerlukan beberapa argumen. Saya berasumsi bahwa mereka dibangun dalam urutan yang tercantum, tetapi dalam satu kasus tampaknya mereka dibangun secara terbalik sehingga membatalkan. Ketika saya membalikkan argumen, program berhenti dibatalkan. Ini adalah contoh dari sintaks yang saya gunakan. Masalahnya, a_ perlu diinisialisasi sebelum b_ dalam kasus ini. Bisakah Anda menjamin pesanan konstruksi?
misalnya
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Jawaban:
Itu tergantung pada urutan deklarasi variabel anggota di kelas. Jadi
a_
akan menjadi yang pertama, makab_
akan menjadi yang kedua dalam contoh Anda.sumber
-Wreorder
di gcc.Mengutip standar, untuk klarifikasi:
sumber
The acuan standar untuk ini sekarang tampaknya menjadi 12.6.2 bagian 13.3:
sumber