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)
C ++仍然将运算符的返回值限制为1相对于0,还是从这些运算符之一返回的“ true”返回任何1字节的值,只要它不为0?
比较运算符(假设它们没有被重载)仅返回true
和false
。
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)