【发布时间】:2016-12-27 00:31:57
【问题描述】:
代码如下:
#include <iostream>
union mytypes_t {
char c;
int i;
float f;
double d;
} mytypes;
int main() {
mytypes.c = 'z';
mytypes.d = 4.13021;
mytypes.f = 41.7341;
cout << mytypes.d << endl;
return 0;
}
程序输出 4.13021(声明为双精度的值)。当我尝试输出 mytypes.c 时,它会打印一个空白方块(表示字符未正确显示)。
根据我对联合的理解,它不应该只包含单一类型的单一值吗?如果这是真的,那它不是一个值为 41.7341 的浮点数,所以调用它作为 double 或 char 会引发错误吗?
【问题讨论】:
-
"抛出错误" -> 这是 C++。 :) 你得到未定义的行为。
-
请注意,访问联合的非活动部分是未定义的行为。
-
如果您想出错,请使用变体类型,例如
boost::variant。
标签: c++ floating-point char double unions