C++ 常量联合对象有什么用途?
如果我创建一个const union对象(例如在下面的代码中),那么在该对象中就不能进行成员赋值。那么,在任何情况下,创建const union对象有什么用呢C++ 常量联合对象有什么用途?,c++,c,constants,unions,C++,C,Constants,Unions,如果我创建一个const union对象(例如在下面的代码中),那么在该对象中就不能进行成员赋值。那么,在任何情况下,创建const union对象有什么用呢 union un { int i; float f; char c; }; const union un a; /// ! a.i = 10; error. 您仍然可以按如下方式初始化联合: const union un a = { .i = 100 }; 然后在代码中使用它。您仍然可以在声明时分配它,例如
union un
{
int i;
float f;
char c;
};
const union un a;
/// ! a.i = 10; error.
您仍然可以按如下方式初始化联合:
const union un a = { .i = 100 };
然后在代码中使用它。您仍然可以在声明时分配它,例如:
const union un a = {0};
更新:该符号设置了第一个联合成员。在
c
中,通过不同的成员解释联合与最近设置的成员并不罕见。当然,它可以是代码> const Value——即我们不会改变它,但是其他人可能会看到,如果整个该死的联盟是代码> const ,那么,如果我用GCC测试,它就不会编译成“联盟”部分。@ AmiigabelLakknt:是的,我认为问题最初只是用C++来标记的,但它也是C,因此,联合
“精心设计的类型说明符”使它具有可移植性。我回滚了我的回滚引脚C,即。在C++中,我认为你可以编写构造函数和类似的东西。Haha,你用35秒的时间打败了我。这是我不知道的。这样就可以初始化任何工会成员@R.MartinhoFernandes,所有成员,归零。@R.MartinhoFernandes第一个成员。形式上,如果你有union{short s;double d;};联合国联盟a={}
,d
的内容未定义(如果a
是const,你无论如何也无法合法访问它们)。@AmigableClarkKant这是错误的(除非他们在C标准的最新版本中做了一些更改)。在C90中,联合初始化始终是第一个成员。在C99中,有一个扩展语法(C++中不存在)来初始化不同的成员,但仍然只有一个成员被初始化。@JamesKanze,据我从标准中所知,un a={0}代码>的意思是:将第一个联合成员设置为零,并将其余的联合成员设置为静态,即也将其设置为零/空。@JamesKanze我认为在实践中,它的工作原理类似于“将所有内容设置为零,然后将第一个成员设置为42”。