共用体是一种数据格式,它能够存储不同的数据类型,但在同一时间只能存储其中的一种类型。共用体的用途之一是,当数据使用两种或更多种格式,但不会同时使用这些格式时,可以节省空间。
例子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的,除非对内存使用很限制的情况用共用体。