2012-08-10 19 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

相关问题