Ale*_* R. 6 c++ deleted-functions aggregate-initialization c++17 c++20
有一个包含POD的结构,默认构造函数已删除。尝试对struct实例进行汇总初始化时,使用编译时会在g ++ 9.1中导致编译错误-std=c++2a。相同的代码可以使用编译-std=c++17。
struct S
{
int a;
S() = delete;
};
int main()
{
S s {.a = 0};
}
Run Code Online (Sandbox Code Playgroud)
struct自C ++ 20起,您不是一个合计。
聚合的定义再次更改:
聚合是以下类型之一:
...
类类型(通常是
structorunion),具有
...
没有用户提供的,继承的或显式的构造函数(允许使用显式默认或删除的构造函数)
(自C ++ 17起)(直到C ++ 20)没有用户声明或继承的构造函数
(自C ++ 20起)
IMO,这修复了语言缺陷。在我看来,能够使用已删除或无法访问的构造函数构造(使用汇总初始化)对象。