Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常量联合对象有什么用途?_C++_C_Constants_Unions - Fatal编程技术网

C++ 常量联合对象有什么用途?

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 }; 然后在代码中使用它。您仍然可以在声明时分配它,例如

如果我创建一个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 }; 

然后在代码中使用它。

您仍然可以在声明时分配它,例如:

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”。