2012-08-10 61 views
31

如果我創建一個常量聯合對象(例如下面的代碼),那麼就不能進行成員分配。那麼在任何情況下,是否有任何使用const union對象的方法?常量聯合對象的用法是什麼?

union un 
{ 
    int i; 
    float f; 
    char c; 
}; 
const union un a; 
/// ! a.i = 10; error. 
+1

在'c'中,通過不同成員來解釋工會與最近設定的不同。當然,它可能是「常量不穩定」的 - 即我們不會改變它,但其他人可能會,而且我們需要能夠看到這一點。 – BoBTFish 2012-08-10 08:12:38

+4

如果整個該死的聯盟是'const',那麼不應該是這樣。 – Puppy 2012-08-10 08:14:08

+0

@Xeo,當我使用gcc進行測試時,它不會在沒有「聯合」部分的情況下編譯。 – 2012-08-10 08:14:11

回答

33

您仍然可以初始化工會如下:

const union un a = { .i = 100 }; 

然後在你的代碼中使用它。

+3

在C中,也就是說。在C++中,我認爲你可以寫一個構造函數和類似的東西。 – Xeo 2012-08-10 08:12:59

+0

哈哈,你在35秒內擊敗了我。 :-) – 2012-08-10 08:13:08

+0

這是我不知道的。這樣任何工會成員都可以初始化! – cirronimbo 2012-08-10 08:23:54

15

,您仍然可以在聲明它分配,比如像這樣:

const union un a = {0}; 

更新:該符號設置工會成員的第一

+2

這組數字是哪一個? – 2012-08-10 08:14:26

+0

@ R.MartinhoFernandes,所有成員,爲零。 – 2012-08-10 08:15:02

+0

是的,但這隻能做只分配第一個成員(或設置爲零,如上所述)! – cirronimbo 2012-08-10 08:19:14

相關問題