【发布时间】:2016-03-18 11:56:59
【问题描述】:
假设我有一个这样的位域:
struct SomeStruct {
uint32_t first : 12;
uint32_t second : 2;
uint32_t third : 18;
};
SomeStruct obj;
我要分配
obj.second = 3; // Actually, the maximum allowed value
实现此目的的可移植方式是什么? 我也不想明确使用已知的位域宽度。
我使用的代码
obj.second = std::numeric_limits<uint32_t>::max()
但是-Wbitfield-constant-conversion 发出警告,cpp reference states:
位域的以下属性是实现定义的 由分配或初始化位域产生的值 值超出范围,或将位字段递增超出其范围。
那么分配-1 或numeric_limits<uint32_t>::max() 真的是可移植的还是有其他方法?
【问题讨论】:
-
@NathanOliver,所以你是否暗示我的问题的答案是“这不可能?”
-
好吧,如果您想获得以位为单位的大小来计算最大值,那么可以。这取决于你想做什么。这就是为什么我先选择相关的。
-
我想指定一个最大值。链接的问题意味着通过首先获取大小是不可能的,好的。有趣的一点是,虽然可以通过获取最大值来获取位大小:)
标签: c++ portability bit-fields