15 Special member functions [special]

15.6 Initialization [class.init]

15.6.1 Explicit initialization [class.expl.init]

Объект типа класса может быть инициализирован заключенным в круглые скобки expression-list, где expression-list конструируется как список аргументов для конструктора, который вызывается для инициализации объекта. В качестве альтернативы, single assignment-expression может быть указан как initializer using = форма инициализации. Применяется либо семантика прямой инициализации, либо семантика копирования-инициализации; см [dcl.init]. [Example:

struct complex {
  complex();
  complex(double);
  complex(double,double);
};

complex sqrt(complex,complex);

complex a(1);                   // initialize by a call of complex(double)
complex b = a;                  // initialize by a copy of a
complex c = complex(1,2);       // construct complex(1,2) using complex(double,double),
                                // copy/move it into c
complex d = sqrt(b,c);          // call sqrt(complex,complex) and copy/move the result into d
complex e;                      // initialize by a call of complex()
complex f = 3;                  // construct complex(3) using complex(double), copy/move it into f
complex g = { 1, 2 };           // initialize by a call of complex(double, double)

end example] [ не влияет на инициализацию. ]Note: Overloading of the assignment operatorend note

Объект типа класса также может быть инициализирован файлом braced-init-list. Применяется семантика инициализации списка; видеть [dcl.init] и [dcl.init.list]. [Example:

complex v[6] = { 1, complex(1,2), complex(), 2 };

Здесь complex​::​complex(double) вызывается для инициализации v[0] и v[3], complex​::​complex(​double, double) вызывается для инициализации v[1], complex​::​complex() вызывается для инициализации v[2], v[4]и v[5]. Другой пример:

struct X {
  int i;
  float f;
  complex c;
} x = { 99, 88.8, 77.7 };

Здесь x.i инициализируется 99, x.f 88,8 и complex​::​complex(double) вызывается для инициализации x.c. ] [ Фигурные скобки можно опустить в любом агрегате, даже если у агрегата есть члены типа класса с определяемыми пользователем преобразованиями типов; см . ]end exampleNote: initializer-list [dcl.init.aggr]end note

[ Note: Если T это тип класса без конструктора по умолчанию, любое объявление объекта типа T (или его массива) неправильно сформировано, если не initializer указано явно (см. [class.init] И [dcl.init]). ]end note

[ Порядок, в котором инициализируются объекты со статической продолжительностью хранения или хранением потоков, описан в и . ]Note: [basic.start.dynamic] [stmt.dcl]end note