我有一个位域:
struct MyBitfield {
unsigned char field1: 1;
unsigned char field2: 1;
};
这些位域参数为1位宽并表示布尔值。我想知道用bools
初始化它是否有效,如下所示
MyBitfield my_bitfield = {true, false};
我的问题是这种行为是否定义明确。 IIUC,false
始终求值为0
,但true
可以求值为任何非零整数。如果它恰好评估为LSB为0
的整数,它是否会被转换为位0
并评估为false
或语言是否保证它将始终被转换为1
位mysql-connector-java-8.0.11.jar
?
答案 0 :(得分:1)
简短回答:是的,语言保证将始终将其强制转换为第1位。
答案很长:
这里有一些很好的信息: Can I assume (bool)true == (int)1 for any C++ compiler?
如果源类型为bool,则值false将转换为零和 值true将转换为一个。
http://en.cppreference.com/w/cpp/language/bool_literal:
#include <iostream>
int main()
{
std::cout << std::boolalpha
<< true << '\n'
<< false << '\n'
<< std::noboolalpha
<< true << '\n'
<< false << '\n';
}
输出:
true
false
1
0
所以是的,语言保证它总是被转换为第1位。
答案 1 :(得分:1)
在cppreference上,我们可以阅读:
如果源类型为bool,则将值false转换为零,将值true转换为目标类型的值(请注意,如果目标类型为int,则为整数提升,而不是整数转化率)。
您的代码没问题。
答案 2 :(得分:0)