2011-06-30 32 views
5

是否有可能與const成員有匿名聯合?我有以下幾點:構造函數和與const成員的匿名聯合

struct Bar { 
    union { 
    struct { const int x, y; }; 
    const int xy[2]; 
    }; 
    Bar() : x(1), y(2) {} 
}; 

隨着G ++ 4.5我得到的錯誤:

error: uninitialized member ‘Bar::<anonymous union>::xy’ with ‘const’ type ‘const int [2]’ 
+0

'struct {const int x,y; };'是無效的C++。你問你是否可以用GCC做點什麼? –

+0

爲什麼它是無效的?它需要一個帶初始化列表的構造函數嗎? – user2023370

+0

GCC -pedantic開關看起來很有用。它說,「ISO C++禁止匿名結構」。如果我刪除上面的'const',我會得到同樣的警告。 – user2023370

回答

3

這是GCC中的一個問題,在4.6版中已經修復。你的代碼現在工作正常。

它仍然依賴於GCC擴展,因爲它使用匿名結構,但大多數編譯器現在都支持它們。此外,下面的代碼現在-pedantic正確構建:

struct Bar { 
    union { 
    const int x; 
    const int y; 
    }; 
    Bar() : x(1) {} 
}; 

該代碼也被鏘和Visual Studio 2010接受(但失敗,2008年)。

0

是。它有可能,但你必須在構建它時初始化它。你不能讓它初始化。但在這種特殊情況下,我不認爲它是可行的,因爲你無法初始化初始化列表中的數組。

順便問一下,看看這個有趣的話題:

0

號嘗試使用GCC的-pedantic開關:

warning: ISO C++ prohibits anonymous structs 

的例子因此也就是非法與const刪除。

+0

恐怕這不會回答這個問題。匿名結構是禁止的,但不是匿名工會。 –

+0

@SamHocevar謝謝!我感謝你的貢獻,但肯定答案在技術上仍然沒有:我一直在尋找合法的C++。 – user2023370

+0

也許你可以編輯問題,然後呢?它聲明_「是否有可能與const成員進行匿名聯合」_答案似乎是肯定的。你似乎有一個與匿名'struct's不同的問題。 –