Mam konstruktora, który przyjmuje pewne argumenty. Zakładałem, że zostały zbudowane w podanej kolejności, ale w jednym przypadku wygląda na to, że zostały wykonane w odwrotnej kolejności, co spowodowało przerwanie. Kiedy odwróciłem argumenty, program przestał przerywać. To jest przykład składni, której używam. Chodzi o to, że w tym przypadku należy zainicjować a_ przed b_. Czy możesz zagwarantować kolejność budowy?
na przykład
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Odpowiedzi:
Zależy to od kolejności deklaracji zmiennej składowej w klasie. Tak
a_
będzie pierwszy, a następnieb_
drugi w twoim przykładzie.źródło
-Wreorder
w gcc.Cytując standard, w celu wyjaśnienia:
źródło
Norma referencyjna dla tego teraz wydaje się być 12.6.2 sekcja 13.3:
źródło