共用体是一种数据格式,它能够存储不同的数据类型,但在同一时间只能存储其中的一种类型。共用体的用途之一是,当数据使用两种或更多种格式,但不会同时使用这些格式时,可以节省空间。

例子1:该程序输出b

union student {
	char name;
	int years;
	long val;
};
int main()
{

	student st1;
	st1.name = 'b';
	
	cout << st1.name << endl;
	system("pause");
    return 0;
}

例子2:来看看当同时调用st1时会发生什么情况,因为共用体不会同时使用这些数据结构,所以该程序输出

@

123456

如果想同时输出,还是用struct吧

#include<iostream>
#include<string>
using namespace std;

union student {
	char name;
	int years;
	long val;

	
};
int main()
{

	student st1;
	st1.name = 'b';
	st1.val = 123456;
	cout << st1.name << endl;
	cout << st1.val << endl;
	system("pause");
    return 0;
}

另外,还需要注意的是,union里面尽量不要有默认构造函数吧,如string,这个笔者不是很明白,笔者遇到的问题是

当union里面的成员是string时,遇到 无法引用默认构造函数,代码如下,报错了


#include<iostream>
#include<string>
using namespace std;

union student {
	string name;
	int years;
	long val;

};
int main()
{

	student st1;
	/*st1.name = 'b';
	st1.val = 123456;
	cout << st1.name << endl;
	cout << st1.val << endl;
	system("pause");*/
    return 0;
}

原因是,string有自己的构造函数,所以报错。所以一般都是使用struct的,除非对内存使用很限制的情况用共用体。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐