已删除的析构函数是否会更改 C++ 中的聚合初始化?

互联网 行业动态 更新时间:2024-06-13 00:19:06

Vla*_*cow 6

C++ 标准中对聚合概念的定义都没有提到析构函数。

例如,C++ 20 (9.4.2 Aggregates) 中聚合的定义听起来如下

1 聚合是一个数组或一个类(第 11 条)

(1.1) — 没有用户声明或继承的构造函数 (11.4.5),

(1.2) — 没有私有或受保护的直接非静态数据成员 (11.9),

(1.3) — 没有虚函数 (11.7.3),和

(1.4) — 没有虚拟、私有或受保护的基类 (11.7.2)。

如果在 MS VS 2019 中执行此语句

std::cout << std::is_aggregate_v<B> << '\n';

那么输出将是1.

另一方面,默认构造函数定义为已删除(C++ 20 标准,11.4.5.2 默认构造函数),如果

(2.8) — 任何可能构造的子对象都具有带有析构函数的类型,该析构函数已从默认的默认构造函数中删除或不可访问。

但是在提供的示例中没有这样的子对象。

所以它似乎是 MS VS 2019 的编译器错误。

更多推荐

初始化,是否会,函数

本文发布于:2023-04-20 20:27:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/06d8947893b991f1a43e249f6f008998.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:初始化   是否会   函数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!