2013-01-17 35 views
4

我可以找到的所有描述在類的上下文中討論「指向成員」。工會與結構非常相似,特別是也有成員。你能否也有一個指向這些成員的指針?你可以有一個「指向成員」的工會成員?

例如

union x { 
    int a; 
    float b; 
}; 
int x::*p = &x::a; 

我不是在談論指針工會作爲一個整體,指針作爲工會成員等在例如p上面真的會偏移,顯然大小爲0。我需要這個構造來回答this question

+1

工會*是*類(§9/ 5),所以我猜「是」。 –

+1

該代碼編譯,所以我認爲是的 –

+1

我不知道你爲什麼想要它,但。您可以將'&x'強制轉換爲'int *'來訪問'a',而不需要知道它的名字。 – hvd

回答

5

§3.9.2/ 1:化合物類型可以通過以下方式來構建:...指針非靜態50類成員,它識別給定類的對象內的給定類型的成員,

§ 8.3.3/1:在聲明TD其中d具有如下形式...和嵌套名稱說明符表示類,...

§5.3.1/ 3:一元&操作的結果是一個指向其操作數的指針。操作數應爲左值或限定符號。如果操作數是qualified-id命名某類C的類型爲T的非靜態成員m,則結果的類型爲「指向T類C類成員的指針」,並且是指定C::m的prvalue。

當然§9.5/ 5:聯合是具有所定義的類的類鍵union ...

(§3.9.2/ 1還提到:工會,這是類...)

沒有提到該類不能成爲一個聯盟,所以是的,你可以形成這樣的PTM類型和價值。

+0

嗯,我想知道這些物體之間的平等程度如何。他們都比較相等'nullptr'? – Potatoswatter

+0

即使偏移量爲0,指向結構第一個成員的指針也不會與「nullptr」相等。指向聯合成員的指針也不應該是。 – hvd

+0

...根據GCC,他們都是相等的,但不是零。 – Potatoswatter