Разница между инициализацией по умолчанию и инициализацией значения в C ++ 03?

Я всегда думал, что создание нового объекта всегда будет вызывать конструктор по умолчанию для объекта, и не имеет значения, был ли конструктор явным или автоматически сгенерированным компилятором. Согласно этот высоко оцененный ответ на другой вопрос, он изменился тонким образом между C ++ 98 и C ++ 03 и теперь работает так:

struct B { ~B(); int m; }; // non-POD, compiler generated default ctor 
new B;   // default-initializes (leaves B::m uninitialized)
new B(); // value-initializes B which zero-initializes all fields since its default ctor is compiler generated as opposed to user-defined.

Кто-нибудь может мне сказать:

  1. Почему был изменен стандарт, то есть какие преимущества это дает или что теперь возможно, чего не было раньше;
  2. Что именно означают термины «инициализация по умолчанию» и «инициализация значения»?
  3. Что уместно часть стандарта?

8
задан Community 23 May 2017 в 12:07
поделиться