比较运算符值C ++

Ser*_*rge 3 c c++ boolean operator-keyword

我们都知道C ++(虽然不是超集)几乎是从C派生的。

在C ++中,运算符<,<=,>,> =,==和!=都具有布尔返回值。但是,在C中,相同的运算符返回1或0,因为C中没有“布尔”类型。

由于除0以外的所有整数值都被视为“ true”,而0为“ false”,我想知道:

C ++仍然将运算符的返回值限制为1相对于0,还是从这些运算符之一返回的“ true”返回任何1字节的值,只要它不为0?

我想知道,因为将这些返回值用作显式1或0在不进行分支的按位运算中将很有用。

作为一个可怕的例子,请采取以下措施:

bool timesTwo;
int value;

//...

if(timesTwo)
    value << 1;

//vs

value << (int) timesTwo;
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 5

C ++仍然将运算符的返回值限制为1相对于0,还是从这些运算符之一返回的“ true”返回任何1字节的值,只要它不为0?

比较运算符(假设它们没有被重载)仅返回truefalse

int(true) 始终为1。

int(false) 始终为0。

所以,

int one(1), two(2);
assert( (one<two) == 1 );
assert( (two<one) == 0 );
Run Code Online (Sandbox Code Playgroud)

  • 在这一点上,该标准保持沉默。您不知道布尔值保留什么字节值,但是您可以*将其转换为int并进行检查。 (4认同)
  • 实际上,是的,这适用于您将要使用的每个copmiler。但是,我不确定该标准是否成立。标准语言只与整数类型之间的转换有关,而与表示形式完全无关。 (4认同)