различие value и default инициализации
От: _Winnie Россия C++.freerun
Дата: 27.07.05 23:44
Оценка:
пока придумал только один пример отличия. Если есть non-pod тип, вроде
class A
{
  std::string s;  
  int i;
};

но без user-defined конструкторов то при default инициализации будет вызван default конструктор и переменная i не будет инициализированна. А при value-initialization i будет инициализирована нулем.

Какие еще отличия есть? Что-то я один конкретный пример придумал, а чем они вообще отличаются никак не пойму, в чем смысл их отличия.






To default-initialize an object of type T means:

— if T is a non-POD class type (clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is an array type, each element is default-initialized;
— otherwise, the object is zero-initialized.

To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);
— 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;
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized

Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.