C++: Конструктор по сравнению с инициализатором перечисляет в структуре/классе

Объект структуры/класса (который не имеет никакого конструктора) может быть создан с помощью списка инициализатора. Почему это не позволяется на структуре/классе с конструктором?

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
9
задан Ashwin Nanjappa 26 May 2011 в 08:30
поделиться

2 ответа

Нет, объект с конструктором больше не считается POD (обычные старые данные). Объекты должны содержать только другие типы POD в качестве нестатических элементов (включая основные типы). POD может иметь статические функции и статические комплексные элементы данных.

Обратите внимание, что предстоящий стандарт C ++ позволит вам определить списки инициализатора, которые позволят инициализировать объекты Non-POD с брекетами.

14
ответ дан 4 December 2019 в 14:28
поделиться

Если на ваш вопрос вы хотите спросить: «Могу ли я сделать это:«

struct MyGizmo
{
  char things_[5];
  MyGizmo() : things_({'a', 'b', 'c', 'd', 'e'}) ();
};

... Тогда ответ нет. C ++ не позволяет этого.

0
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: