Инициализация модуля C ++ через c'or по умолчанию - PullRequest
4 голосов
/ 24 ноября 2010

Рассмотрим этот POD:

struct T
{
   int i;
   char c;
};

В каком стандарте C ++ требовалось, чтобы члены POD были инициализированы нулем с помощью стандартного c'or (или это было в стандартах с самого начала)?

Да, это означает, что без указания пользователем c'tor, 'i' и 'c' будут оба инициализированы в 0. Смотри http://msdn.microsoft.com/en-us/library/80ks028k%28VS.80%29.aspx

Ответы [ 2 ]

5 голосов
/ 24 ноября 2010

То, о чем вы говорите, правильно называется «инициализация значения». Он был введен в C ++ 03 (он определен в §8.5 / 5, на случай, если вы захотите посмотреть детали).

5 голосов
/ 24 ноября 2010

Не знаю, правильно ли я понял ваш вопрос.

это означает, что без указания пользователем c'tor, 'i' и 'c' будут оба инициализированы как 0.

Не обязательно.

Например:

T x; // `i` and `c` are uninitialized

T *ptr = new T; // `i` and `c` are uninitialized
T *pptr = new T(); //`i` and `c` are zero initialized as `T()` implies value initialization

T x(); // x is a function returning a type T and taking no arguments.

Если быть точным value initialization (C ++ 03 Section $ 8.5 / 5) - это то, что вы ищете. Он был введен в C ++ 03.

...