普通union:
#include <iostream>
using namespace std;
void checkCPU()
{
union MyUnion{
int a;
char c;
}test;
test.a = 1;
if (test.c == 1)
cout << "little endian" <<endl;
else cout << "big endian" <<endl;
}
int main()
{
checkCPU();
return 0;
}
匿名union:
匿名联合体是不同时定义任何变量(包含联合体类型的对象、引用或指向联合体的指针)的无名联合体定义。
匿名联合体有更多限制:它们不能有成员函数,不能有静态数据成员,且所有数据成员必须为公开。允许的声明仅有非静态数据成员和static_assert 声明 (C++14 起)。
匿名联合体的成员被注入外围作用域(而且必须不与声明于其处的其他名称冲突)。
示例代码:
#include <iostream>
using namespace std;
int main()
{
union
{
int a;
const char* p;
};
a = 1;
p = "Jennifer";
cout << &a << endl << &p << endl;
return 0;
}
实验结果:
说明a,p使用的事同一个实例
所以对于union内的变量是指向同一块内存的变量,注意在后续代码中特殊处理!!!