C ++联合,垃圾值

问题描述 投票:1回答:1

对于以下代码

#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 使用命名空间std;联合类型{int a;字符b; }; int main(){首先输入; first.b ='a'; cout <

如果在第一个代码示例中指定first.a-您将获得固定的,稳定的值。

您具有4字节大小的并集,并且仅初始化其中一个字节。

c++ visual-c++ g++ msvc12
1个回答
0
投票

如果在第一个代码示例中指定first.a-您将获得固定的,稳定的值。

© www.soinside.com 2019 - 2024. All rights reserved.