2012-12-10 51 views
0

假設我們正確解引用並使用整數的權利,這是一個很好的編程習慣?聯合中有一個指針和一個非指針數據類型是否有效?

union { 
int x; 
struct node * next; 
}; 
+1

'union's永遠不是一個好的編程習慣。 – Pubby

+0

不是一個便攜式計劃atleast –

+3

@Grijesh Chauhan:關於工會絕對沒有什麼不好或不可移植的。 「非便攜式」神話通常植根於完全錯誤的信念,即存在重新解讀內存的工會。這只不過是一個神話。說「工會永遠不是好的做法」是完全不正確的。 – AnT

回答

9

工會是相當低級的語言功能。關於哪種類型可以在一個工會中共同存在,存在任何限制性的「良好編程實踐」沒有任何有意義的理由。聯合的目的是「複用」內存使用情況:通過在同一內存區域中存儲具有非重疊生命週期的多個不相關對象來節省空間。

如果這就是你需要的 - 去爲它。

工會有時用於原始記憶重新解釋(AKA類型雙關語)。過去,工會的這種用法是非法的,直到它在C99標準的最新技術勘誤之一中正式合法化。雖然它有其用處,但是類型雙擊確實可以被看作是有問題的編程實踐。

+0

我同意你的觀點。 +1 –

+1

+1:*「將不重疊的對象與非重疊的生命期存儲在同一個內存區域中」*。它無法表達得更好。 –

+0

「在同一內存區域中存儲不重疊的生命週期的對象」 - 喜歡這個。這正是我使用這個BTW的原因。這段代碼將放在控制器上,節省內存是關鍵。只是覺得我擔心的是有人解引用int.Yes,它的內核代碼.. – Laz

1

有效嗎?是。

好主意?可能不會。指針在64位上甚至不是sizeof(int),所以這會導致結果不那麼有用。

+1

它有什麼關係?如果它們的尺寸相同,我們可以得到什麼「有用的結果」? – AnT

+0

@AndreyT lazy-man的點對整型鑄造?沒有捍衛這個工會的用例(它有一個目的,但他們是錯誤傾向)。 –

+0

這不會是「鑄造」。這將是內存重新解釋AKA類型雙關。只是不要這樣做。這不是工會的目的。 – AnT

相關問題