C++20 中的自动构造函数继承

mad*_*ada 2 c++ constructor class c++20

我只有这段代码,我想知道为什么这段代码可以在 C++20 及更高版本中编译,但不能在 C++17 及更早版本中编译。

struct B {
  B(int){};
};

struct D : B {
};

int main() {

  D d = D(10);

}
Run Code Online (Sandbox Code Playgroud)

我知道继承构造函数是 C++11 的一项功能。但类D不会继承B::B(int)构造函数,即使这一行D d = D(10);可以编译。我的问题是,为什么它只能在 C++20 中编译,而不能在 C++17 中编译?是否引用了此处适用的 C++ 标准?

我正在使用 g++11.2.0。

Bri*_*ian 7

C++20 添加了使用括号初始化聚合的能力;参见P0960。以前,您可以d使用D d{10};;进行初始化。现在你可以用括号而不是大括号做同样的事情。该类D不会隐式继承构造函数B