Сообщение Re[2]: Вопрос по value-initialization от 16.05.2017 7:39
Изменено 16.05.2017 7:47 N. I.
R>Разве пример приведенный здесь не описывает Ваш случай?
R>
R>struct A
R>{
R> int i;
R> A() { } // user-provided default ctor, does not initialize i
R>};
В его случае у A нет user-declared или user-provided конструкторов.
К non-static data member p применяетсяTo value-initialize an object of type T means:
....
— if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized;
и дальшеTo value-initialize an object of type T means:
....
— otherwise, the object is zero-initialized
Нулевое значение будет либо скопировано из A().p в a.p копирующим конструктором A, либо присвоено a.p непосредственно за счёт value-initialization (если произошло copy elision, из-за которого объекты A() и a сливаются в один).To zero-initialize an object of type T means:
— if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;
R>Разве пример приведенный здесь не описывает Ваш случай?
R>
R>struct A
R>{
R> int i;
R> A() { } // user-provided default ctor, does not initialize i
R>};
В его случае у A нет user-declared или user-provided конструкторов. Начиная с C++03 (где понятие value-initialization впервые появилось), p должно быть проиницилизировано соответствующим нулевым значением:
К non-static data member p применяетсяTo value-initialize an object of type T means:
....
— if T is a non-union class type without a user-declared constructor, then every non-static data member and base-class component of T is value-initialized;
To value-initialize an object of type T means:
....
— otherwise, the object is zero-initialized
и дальше
To zero-initialize an object of type T means:
— if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;
Нулевое значение будет либо скопировано из A().p в a.p копирующим конструктором A, либо присвоено a.p непосредственно за счёт value-initialization (если произошло copy elision, из-за которого объекты A() и a сливаются в один).