[英]union inside a struct — how to do designated initializer?
static const st someval = { .sign = 0, .cells ={ 0 }, // ^ .cells = { 11 } }; // ^
您将cells
初始化两次,这会使它在C ++中格式错误。
同样, sign
和cell
都不是st
直接成员。 该声明也用C构成 。
以下是在C ++ 20中正确使用指定的初始值设定项(未来的C ++标准,建议将指定的初始值设定项引入该语言):
static const st someval = {
.u{.s{.sign = 0, .cells = 11}},
// NOTE .extra left zero-initialized
};
或以下版本,在C ++ 20和C中都是正确的:
static const st someval = {
.u = {.s = {.sign = 0, .cells = 11}},
};
但是,当前的C ++标准没有指定的初始化程序。 您可以编写一个函数,该函数创建一个局部的非常量零初始化st
对象,然后使用成员访问器初始化要初始化的特定成员,然后返回该对象。 然后,您可以通过调用该函数来初始化const st
对象。 该初始化函数可能在其他任何地方都没有用,因此您可能要使用lambda以避免不必要地污染名称空间。
static const st someval = []() {
st o {};
o.u.s.sign = 0;
o.u.s.cells = 11;
return o;
}();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.