Информация об изменениях

Сообщение ? Зачем виртуальный метод запрещает структурную инициализаци от 22.08.2023 17:36

Изменено 22.08.2023 17:37 Sm0ke

? Зачем виртуальный метод запрещает структурную инициализацию
Вот есть простые структуры. Без явных конструкторов.
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)

#include <iostream>

using t_diff = std::ptrdiff_t;

struct t_param
{
  // data
  t_diff
    count{};
  bool
    flag{};

  //virtual void no() const {}
};

int main()
{
  t_param o{1};
  t_param p{.flag = true}; // designated / by prop name
  return 0;
}


Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор

Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!
? Зачем виртуальный метод запрещает структурную инициализаци
Вот есть простые структуры. Без явных конструкторов.
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)

#include <iostream>

using t_diff = std::ptrdiff_t;

struct t_param
{
  // data
  t_diff
    count{};
  bool
    flag{};

  //virtual void no() const {}
};

int main()
{
  t_param o{1};
  t_param p{.flag = true}; // designated / by prop name
  return 0;
}


Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор


Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!