[英]Can or should I make bools bit fields?
这是合法的还是推荐的? 我读到你应该只使用整数类型作为位域,但这适用于布尔类型吗? 这可以吗,或者这是不好的做法或未定义的行为?
struct MyStruct {
// ...
bool SomeBooleanProperty:1;
// ...
};
可以...我制作布尔位字段吗?
<\/blockquote>是的。 它是 3 个定义明确的选择之一。
位域的类型应为
_Bool<\/code> 、
signed int<\/code> 、
unsigned int<\/code>或其他一些实现定义的类型的合格或非合格版本。
是否允许原子类型是实现定义的。 C17dr § 6.7.2.1 5
....我应该制作布尔位字段吗?
是的,如果它使代码更清晰。
注意:这是一个不使用
int x:1<\/code>的地方,因为如果
x<\/code>具有值 [0,1] 或 [-1,0],它是实现定义的。
分别对 [-1,0]、[0,1]、[0,1] 使用有
signed int x:1<\/code>或
unsigned x:1<\/code>或
_Bool x:1<\/code> 。
对于
x:1<\/code> ,在分配超出范围的值时,
bool<\/code>的功能规范确实比有
signed int<\/code>更清晰。
见评论<\/a>。
对于
unsigned<\/code> ,仅复制 LSbit。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.