Я работаю на союз с использованием C++, Ниже фрагмент кода:Неопределенный bhaviour с использованием объединения в cpp?
#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;
}
Выход:
numbers.PI :3
Даже значение numbers.PI устанавливается на 3 уже, первый "если" условие дает false. В чем причина такого поведения?
Совет кодирования: 'typedef union myunion {...} MYUNION;' - это подход C-стиля, совершенно ненужный в C++ , Просто выполните 'union MYUNION {...};' если вы хотите, чтобы это так называлось. В C++ имена 'struct',' union' и 'class' имеют то же пространство имен, что и другие идентификаторы, поэтому вам не нужно приписывать им ключевое слово' struct' (или другое), как в C , – Angew