Вы не можете сделать это, потому что это не синтаксис языка C ++.
Причина, по которой он написан таким образом, заключается в том, что (по крайней мере, для членов класса) инициализатор вызывает конструкторкласс с указанными параметрами.Он не создает типы, а затем присваивает им значения.Весь смысл использования инициализаторов, а не присвоения значений в теле конструктора, состоит в том, чтобы избежать двойного шага построения объекта, а затем присвоить ему значение.
Если у вас есть 3 класса A
, B
и C
, где C
имеет члены a
типа A
и b
типа B
, тогда этот конструктор:
C() :
a(1234),
a(4567)
{
}
будет эквивалентен следующему коду внекласс:
A a(1234);
B b(4567);
В то время как этот конструктор:
C()
{
a = 1234;
b = 4567;
}
Эквивалентен:
A a; // default construct a
B b; // default construct b
a = 1234;
b = 4567;
В этих простых случаях компилятор, вероятно, оптимизирует эти небольшиеразличия, но для более сложных объектов-членов конструкция по умолчанию с последующим присваиванием может быть дорогой или даже невозможной (например, если у объекта-члена нет конструктора по умолчанию).