C++20 中的自动构造函数继承
Automatic constructor inheritance in C++20
我只有这段代码,我想知道为什么这段代码可以在 C++20 及更高版本中编译,但不能在 C++17 及更早版本中编译。
struct B {
B(int){};
};
struct D : B {
};
int main() {
D d = D(10);
}
我知道继承构造函数是 C++11 的特性。但是 class D
不继承 B::B(int)
构造函数,即使这一行 D d = D(10);
编译。我的问题是,为什么它只在 C++20 中编译而不在 C++17 中编译?是否引用了此处适用的 C++ 标准?
我正在使用 g++11.2.0.
C++20 增加了使用括号初始化聚合的能力;参见 P0960。以前,您可以使用 D d{10};
初始化 d
;现在你可以用圆括号而不是大括号做同样的事情。 class D
不会隐式继承 B
.
的构造函数
由于struct D
是聚合类型,在C++20之前你不能使用()
进行初始化,例如D(10)
.
感谢P0960, now in C++20 you can initialize aggregates from a parenthesized list of values. Note that currently, only later versions of GCC-10 and MSVC-19.28 implement this feature, for Clang it will still complain
<source>:15:9: error: no matching conversion for functional-style cast from 'int' to 'D'
D d = D(10);
^~~~
我只有这段代码,我想知道为什么这段代码可以在 C++20 及更高版本中编译,但不能在 C++17 及更早版本中编译。
struct B {
B(int){};
};
struct D : B {
};
int main() {
D d = D(10);
}
我知道继承构造函数是 C++11 的特性。但是 class D
不继承 B::B(int)
构造函数,即使这一行 D d = D(10);
编译。我的问题是,为什么它只在 C++20 中编译而不在 C++17 中编译?是否引用了此处适用的 C++ 标准?
我正在使用 g++11.2.0.
C++20 增加了使用括号初始化聚合的能力;参见 P0960。以前,您可以使用 D d{10};
初始化 d
;现在你可以用圆括号而不是大括号做同样的事情。 class D
不会隐式继承 B
.
由于struct D
是聚合类型,在C++20之前你不能使用()
进行初始化,例如D(10)
.
感谢P0960, now in C++20 you can initialize aggregates from a parenthesized list of values. Note that currently, only later versions of GCC-10 and MSVC-19.28 implement this feature, for Clang it will still complain
<source>:15:9: error: no matching conversion for functional-style cast from 'int' to 'D'
D d = D(10);
^~~~