簡體   English   中英

在C ++中使用聯合時不理解輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM