从 class 派生的结构的初始化列表 (C++)

Initializer list for struct deriving from class (C++)

你能告诉我下面的例子有什么问题吗?我正在使用 C++17,我认为应该支持以下内容。

class Base {
public:
    virtual ~Base() = default;
};

struct Derived : public Base {
    int m1;
};

int main() {
    /* Results in a compilation error 
     * error C2440: 'initializing': cannot convert from 'initializer list' to 'Derived'
     * message : No constructor could take the source type, or constructor overload resolution was ambiguous */
    Derived d{ {},1 };
    return 0;
}

它不起作用,因为 Derived 不是聚合,因为它有一个包含虚拟成员的基础 class。

代码在Base中去掉虚析构函数并使用C++17时编译运行。

如果 Base 需要虚拟析构函数,Derived 可以实现自定义构造函数,允许使用大括号进行初始化。

class Base {
public:
    virtual ~Base() = default;
};

struct Derived : public Base {
    Derived(int m): m1(m) {}
    int m1;
};

int main() {
    Derived d{ 1 };
    return 0;
}