今天在翻书时,看到提到union,才想起自己基本没怎么在项目里用过这个。所以今天正好试试:
1. union 的大小
先来看一段代码。
union MyUnion {
int intVal; // 整数值
double doubleVal;
float floatVal;
char charVal;
char charArr[10]; // 字符数组
};
其中,单个来看,charArr[10] 是size最大的,那么MyUnion的大小会是所有的加起来,还是只是其中size最大的成员的大小呢。
答案是:
为什么呢?这也很好理解,和struct一样,都存在内存对齐。在64位处理器中,内存对齐的单位一般是8字节,因此根据最大成员的10字节,补齐则是16字节。 当然,我们为了验证是不是8字节对齐,可以修改charArr[] 的大小到 17,如果是8字节对齐,则输出应该是24。
没错,就是8字节。
2.union未赋值的成员值是多少
MyUnion myUnion2;
myUnion2.intVal = 100;
std::cout<<"my union2 intVal : "<<myUnion2.intVal<<std::endl;
//
std::cout<<"my union2 doubleVal : "<<myUnion2.doubleVal<<std::endl;
是未定义的值,并不是想象中的将int强转为double。