C++ 为什么从另一个已初始化的成员分配联合成员?
在未初始化的情况下声明变量将有一个垃圾值,因此在此程序中,我使用一个并集:C++ 为什么从另一个已初始化的成员分配联合成员?,c++,member,unions,C++,Member,Unions,在未初始化的情况下声明变量将有一个垃圾值,因此在此程序中,我使用一个并集: union un { int value; char c; }; int main() { un x; x.c = 'A'; cout << x.value << endl; // garbage: ok } 联合国 { int值; 字符c; }; int main() { UNX; x、 c=‘A’; coutYourr是一个全局变量。这些变量被初始化
union un
{
int value;
char c;
};
int main()
{
un x;
x.c = 'A';
cout << x.value << endl; // garbage: ok
}
联合国
{
int值;
字符c;
};
int main()
{
UNX;
x、 c=‘A’;
coutYour
r
是一个全局变量。这些变量被初始化为零。value
的第一个字节是c
,其他字节是零
相反,
x
是一个局部变量,它们没有初始化。value
的第一个字节也是c
,但其他字节就像你所说的随机或垃圾。我不确定这是链接问题的重复。是的,它是未定义的行为,因此“任何事情都可能发生”,但答案实际上解释了这些值不同的原因。也许可以修改标题,以突出问题的重点,即全局值和局部值之间的差异。@AnT:IMO这只是一个输入错误。我修正了它。
union un
{
int value;
char c;
}r;
int main()
{
r.c = 'A';
cout << r.value << endl; // 65! as we know the ASCII value of character 'A' is 65
}