5

可能重复:
带有布尔值的 C++ 位域打包

bool在位域定义中使用 C++ 的关键字是否保证安全?

就像是:

struct flags {
    bool a : 1;
    bool b : 1;
}
4

2 回答 2

6

从 C++03 9.6 “位域”:

位域应具有整数或枚举类型(3.9.1)。普通(既不是显式签名也不是无符号)char、short、int 或 long 位字段是有符号还是无符号是实现定义的。bool 值可以成功地存储在任何非零大小的位域中。...

如果值 true 或 false 存储到任何大小的 bool 类型的位域(包括一位位域),则原始 bool 值和位域的值应比较相等。...

3.9.1/7“基本类型”指定它bool是一个整数类型。

于 2012-11-01T04:53:57.843 回答
5

是的。在实践中,您可以将sizeof(bool) * CHAR_BIT其用作了解可用位数的指南。

来自 C++98,第 9.6.3 节

位域应具有整数或枚举类型(3.9.1)。

来自 C++98,第 3.9.1.7 节

bool、char、wchar_t 类型以及有符号和无符号整数类型统称为整数类型

于 2012-11-01T04:53:11.403 回答