С++ 2003 8.5/5 говорит:
Для инициализации объекта типа T по умолчанию:
- если T - тип класса не-POD (раздел 9), вызывается конструктор по умолчанию для T (и инициализация плохо сформированный, если T не имеет доступного конструктора по умолчанию);
- если T - тип массива, каждый элемент инициализируется по умолчанию;
- в противном случае объект с нулевой инициализацией.
[Акцент добавлен.]
Сценарий С++ 2011 изменил последний элемент на
- в противном случае не выполняется инициализация.
Это похоже на то, что это будет изменение для некоторых программ. Было ли это намеренно?
Edit
Вот код, который мотивирует этот вопрос:
class Foo {
public:
Foo() : m_values() {}
int m_values[3];
};
До С++ 11 я думал, что явное упоминание m_values
в конструкторе по умолчанию будет инициализировать этот массив по умолчанию. И поскольку элементы массива являются скалярными, я ожидал, что для обозначения значений все значения равны 0.
В С++ 11, похоже, больше нет гарантии, что это произойдет. Но, возможно, как указывает Mooing Duck в комментариях, возможно, это уже не случай инициализации по умолчанию, а какая-то другая форма, которая сохраняет ожидаемое поведение. Цитаты приветствуются.