如果在第一个代码示例中指定first.a-您将获得固定的,稳定的值。
对于以下代码
#include <iostream>
using namespace std;
union type
{
int a;
char b ;
};
int main()
{
type first;
first.b = 'a';
cout << first.a << " " << first.b << endl;
}
输出为-858993567 a
(MSVC)或4201057 a
(g ++ MINGW)。
但是]
#include <iostream> using namespace std; union type { int a; char b ; }; int main() { type first; first.a = 0; first.b = 'a'; cout << first.a << " " << first.b << endl; }
输出为
97 a
并且这些值在每种情况下都是固定的(尝试重新启动并创建新的工作空间/文件,因此不是垃圾值)。
所以,为什么初始化(在第二种情况下)有所作为?
[我已经在Visual Studio(使用MSVC)和Visual Studio代码(使用g ++)上进行了尝试。
更新1
我在可能使用Linux g ++的在线IDE上进行了检查,在两种情况下,它们都给出了确切的预期答案,即97 a
。对于以下代码#include
如果在第一个代码示例中指定first.a-您将获得固定的,稳定的值。
您具有4字节大小的并集,并且仅初始化其中一个字节。
如果在第一个代码示例中指定first.a-您将获得固定的,稳定的值。