У меня есть конструктор, который принимает некоторые аргументы. Я предполагал, что они были построены в указанном порядке, но в одном случае кажется, что они были построены в обратном порядке, что привело к прерыванию. Когда я изменил аргументы, программа перестала прерываться. Это пример синтаксиса, который я использую. Дело в том, что a_ нужно инициализировать перед b_ в этом случае. Можете ли вы гарантировать порядок строительства?
например
class A
{
public:
A(OtherClass o, string x, int y) :
a_(o), b_(a_, x, y) { }
OtherClass a_;
AnotherClass b_;
};
Ответы:
Это зависит от порядка объявления переменных-членов в классе. Так
a_
будет первым, потомb_
вторым в вашем примере.источник
-Wreorder
В gcc.Цитировать стандарт, для уточнения:
источник
Стандартная ссылка на это теперь , кажется, 12.6.2 раздел 13.3:
источник