C ++: конструктор против списка инициализаторов в структуре / классе - PullRequest
9 голосов
/ 19 января 2010

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

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work

Ответы [ 2 ]

14 голосов
/ 19 января 2010

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

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

0 голосов
/ 19 января 2010

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

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

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

...