c++回顾(二):关于union共用体

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

例子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的,除非对内存使用很限制的情况用共用体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值