在 c++20 中删除了默认构造函数的聚合初始化

2023-11-21

有一个包含 POD 的结构体和默认构造函数被删除。尝试聚合初始化结构体实例会导致 g++9.1 编译时出现编译错误-std=c++2a。相同的代码可以很好地编译-std=c++17.

https://godbolt.org/z/xlRHLL

struct S
{
    int a;
    S() = delete;
};

int main()
{
    S s {.a = 0};
}

Your struct从 C++20 开始就不是聚合。

聚合的定义再次更改:

参考参数

聚合是以下类型之一:

  • ...

  • 类类型(通常,struct or union), 具有

    • ...

    • 没有用户提供的、继承的或显式的构造函数(允许显式默认或删除的构造函数)
      (自 C++17 起)(直到 C++20)

    • 没有用户声明或继承的构造函数
      (自 C++20 起)

IMO,这修复了语言中的缺陷。在我看来,能够使用已删除或不可访问的构造函数构造(使用聚合初始化)对象并不合适。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 c++20 中删除了默认构造函数的聚合初始化 的相关文章

随机推荐