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