常量联合对象有什么用?

cir*_*mbo 31 c c++ const unions

如果我创建一个const联合对象(例如在下面的代码中),那么就不能完成成员赋值.那么在任何情况下都有使用const联合对象吗?

union un
{
    int i;
    float f;
    char c;
};
const union un a; 
/// ! a.i = 10; error.
Run Code Online (Sandbox Code Playgroud)

use*_*136 34

您仍然可以按如下方式初始化union:

const union un a = { .i = 100 }; 
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中使用它.

  • 在C中,即.在C++中,我认为你可以写一个构造函数和类似的东西. (3认同)

Pro*_*ica 15

你仍然可以在声明中分配它,例如:

const union un a = {0};
Run Code Online (Sandbox Code Playgroud)

更新:该表示法设置第一个联盟成员.

  • 这个成员是哪个成员? (2认同)
  • @ R.MartinhoFernandes第一个成员.在形式上,如果你有'联合联合国{短期; 双d; }; union un a = {};`,`d`的内容是未定义的(如果`a`是const,那么你无论如何也无法合法地访问它们). (2认同)
  • @AmigableClarkKant那是错的(除非他们在C标准的最后一个版本中改变了一些东西).在C90中,联合初始化始终是第一个成员.在C99中,有一个扩展语法(在C++中不存在)来初始化不同的成员,但仍然只有一个成员被初始化. (2认同)