繁体   English   中英

我可以或应该制作布尔位字段吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM