C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 为什么联盟已经删除默认构造函数,如果其中一个成员没有任何一个?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
N3797 :: 9.5 / 2 [clasS.Union]说:

我试图通过例子来理解这个说明:@H_607_3@

#include <iostream>
#include <limits>

struct A
{
    A(const A&){ std::cout << "~A()" << std::endl; } //A has no default constructor
};

union U
{
    A a;
};

U u; //error: call to implicitly-deleted default constructor of 'U'

int main()
{

}

DEMO@H_607_3@

这种行为对我来说不是很清楚. struct A没有隐式声明的认构造函数,因为12.1 / 4:[class.ctor]说:@H_607_3@

这意味着struct A没有一个非平凡的认构造函数(根本没有认构造函数,特别是非平凡的).这是联合U不必具有删除认构造函数.怎么了?@H_607_3@

解决方法@H_489_14@
相关措辞在C 11 [class.ctor] p5(强调我的):

您的类A没有认构造函数,因此认的认构造函数(不管是隐式还是显式)对于包含类型A的非静态数据成员的类X(无论是联合还是非联合)都不使用初始化,导致认构造函数X被删除.它必须:编译器根本没有办法生成任何其他认构造函数.@H_607_3@

至于您在评论中的后续问题:@H_607_3@

如果代替A没有认构造函数,它有一个非平凡的认构造函数,那么在一个union和一个非union类中使用它们之间有区别,也是[class.ctor] p5的一部分:这是我之前引用的第一个重点,我没有重点介绍.@H_607_3@

大佬总结

以上是大佬教程为你收集整理的c – 为什么联盟已经删除默认构造函数,如果其中一个成员没有任何一个?全部内容,希望文章能够帮你解决c – 为什么联盟已经删除默认构造函数,如果其中一个成员没有任何一个?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。