我正在使用c ++进行联合,以下是代码片段:
#include<iostream>
using namespace std;
typedef union myunion
{
double PI;
int B;
}MYUNION;
int main()
{
MYUNION numbers;
numbers.PI = 3;
numbers.B = 50;
cout <<" numbers.PI :" << numbers.PI << endl;
if(numbers.PI == 3.0)
{
cout <<"True";
if(numbers.B == 50)
{
cout <<" numbers.PI :" << numbers.PI << endl;
cout <<" numbers.B :" << numbers.B << endl;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
numbers.PI :3
Run Code Online (Sandbox Code Playgroud)
甚至number.PI的值已经设置为3,首先"if"条件产生为false.这种行为的原因是什么?
小智 5
原因是没有理由.
您的代码调用未定义的行为,因为您正在设置Bunion 的成员:
numbers.B = 50;
Run Code Online (Sandbox Code Playgroud)
但在设置之后,您立即读出其他成员 PI:
cout <<" numbers.PI :" << numbers.PI << endl;
Run Code Online (Sandbox Code Playgroud)
也许你混淆了工会和结构 - 除非浮点数3和整数50在你的架构上具有相同的位表示(这是非常不可能的),你期望从程序中获得的行为只有在你使用的时候才是合理的struct.
(union成员驻留在内存中的相同位置 - 设置一个也会覆盖另一个.对于a struct,每个成员都存储在不同的内存位置,这不是真的.)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |