我编写了 C++ 代码来理解联合概念。在代码中,我为 char 数组分配了一些字符并打印 int 值,但我不明白其背后的逻辑。需要帮助吗? 下面是我写的代码。
#include <iostream>
union float_u {
int f;
char a[sizeof(int)];
} data1;
using namespace std;
int main()
{
cout << "Size of union :" << sizeof(data1)<<endl;
data1.a[0] = '@';
data1.a[1]= '@';
cout << "value of f :" << data1.f << endl;
return 0;
}
输出如下:
工会规模:4
f 值:16448
你无法通过编写代码并研究其输出来理解 C++。那是因为有太多方法可以编写编译时没有错误但具有未定义 bahvior 的 C++ 代码。
我引用自https://en.cppreference.com/w/cpp/language/union。
从不是最近写入的联合成员中读取内容是未定义的行为。
您正在写信给
a
。 a
是工会的活跃成员。从 f
读取未定义。原则上你可以获得任何输出。
许多编译器作为非标准语言扩展实现了读取联合体非活动成员的能力。
据我所知,C 中允许通过联合进行类型双关,因此编译器在 C++ 中也允许它并不太困难。不过,当您使用编译器扩展时,您需要注意它不是标准的可移植 C++,并且您需要阅读编译器手册。