C ++: Список конструктора против инициализатора в struct/class

StackOverflow https://stackoverflow.com/questions/2095759

Вопрос

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

struct r { int a; };
struct s { int a; s() : a(0) {} };
r = { 1 }; // works
s = { 1 }; // does not work
Это было полезно?

Решение

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

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

Другие советы

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

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

... тогда ответ нет. C ++ не допускает этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top