#include<iostream>
using namespace std;
union U1 {
int a;
float b;
string str;
};
int main()
{
U1 u1;
u1.str = 'str';
cout << u1.str << endl;
}
原因:string为一个类,拥有自己的构造函数和析构函数,union中成员公用一段地址,在进行初始化的时候不同成员引用不同的构造函数,但它并不知道你要用哪个,所以成员中不能拥有类的对象,尽量使用基本的定义char,int等。
上述代码将string改为char就不会报错。