结构内工会的常量成员的问题
Problems with const members of a union within a structure
我想将结构的某些部分声明为 const,因为我在 API 调用中将其传递给第三方。 我计划通过使用 C 样式强制转换丢弃 const 来填充值。 这允许我设置它们,但 API 的用户知道这些是输入值,因为他们不容易设置它们。
把它简化为一个简单的例子,我有
struct mystruct
{
union valuesUnion
{
const int32_t integer;
const double real;
valuesUnion() : integer(0), real(0.0) {}
} values;
mystruct() : values(valuesUnion())
{
}
};
int main()
{
mystruct a;
}
请注意,我必须为"mystruct"添加一个构造函数,否则由于未初始化的 const 变量,您会收到编译错误。
但是我得到一个错误 -
g++ Z.cpp -o Z Z.cpp:在构造函数中 âmystruct::valuesUnion::valuesUnion()â: Z.cpp:11:5:错误:初始化"mystruct::valuesUnion"的多个成员 制造:*[Z] 错误 1
如果我将联合构造函数更改为读取,我可以解决此问题 -
valuesUnion() : integer(0) {}
然后我没有收到来自g ++的错误,但它无法在Visual Studio 2012上编译 -
值联盟::real' :必须在构造函数基/成员初始值设定项列表中初始化
我这样做的方式是错误的吗?
谢谢。
Union 不像类或结构,因为两个"属性"引用同一个内存单元。 只有在为同一内存区域进行两次初始化后,才能初始化此内存。
如果您更改
union valuesUnion
为
struct valuesUnion
然后,您可以检查初始化列表是否适合不同的内存区域。
相关文章:
- constexpr构造函数需要常量成员函数时出现问题
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++中的指针和常量问题不大
- 当成员值从指针更改为非指针时,C++常量问题
- 常量公共成员有什么问题?
- 生成提升::hana::set 的常量表达式问题
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 关于在需要常量表达式的上下文中使用的glvalue常量表达式的问题
- public:静态常量字符串声明/初始化问题
- C++继承和"常量"交互的问题
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 将 c++ 字符串转换为常量字符 * 时出现问题
- 推导模板化类参数的模板参数:常量问题
- C++:常量减少重复符号问题
- 常量迭代器的问题
- Win32 Atoi 问题无法将参数 1 从 'wchar_t [5]' 转换为常量字符 *
- 常量正确性和shared_ptr,一个设计问题
- 如何解决这个问题?非常量引用必须绑定到左值
- 真的很想解决地图的"常量"问题
- ENUM常量问题