[英]Don't understand the output when using Unions in c++
我不太明白以下代碼的輸出
union foo
{
int a;
double b;
};
int main()
{
foo f;
f.b = 12.0;
cout << f.b << endl;
f.a = 69;
cout << f.b << endl;
cout << f.a << endl;
return 0;
}
為什么打印12 12 69
如果我沒記錯的話,第二十二應該是垃圾。 我正在使用Visual Studio 2010。
您的代碼有一個錯誤。 該標准指定,如果您從寫入的最后一個工會成員之外的任何工會成員中讀取,則結果未指定。 如果您修改了代碼並遵守了標准,那么這個奧秘將消失。
最有可能的是,編譯器僅使用兩個寄存器就優化了並集。
請參見6.2.6.1或J.1節,其中指出“未存儲最后一個工會成員的工會成員的值”未指定,並且可能返回任何不會引起陷阱的值。
如果我更精確地打印值,我得到
12.000000000000122569
對於fa = 69
之后的fb
。
除了未定義的行為外,可能發生的情況是,設置fa
只會更改有效數字的最低有效位( sizeof(int)
可能是4, sizeof(double)
8),因此您得到的值接近於最初設置的12.0
,差異太小,無法顯示標准打印。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.