We all know C++ (while not a superset) is pretty much derived from C.
In C++, the operators <, <=, >, >=, ==, and != all have boolean return values.
However, in C, the same operators returned 1 or 0, since there was no ‘bool’ type in C.
Since all integer values except 0 are treated as “true”, and 0 is “false”, I want to know:
Does C++ still restrict the return values of the operators to be 1 vs 0, or does a ‘true’, from one of these operators, return any 1-byte value, so long as it isn’t 0?
I want to know since using these return values as explicit 1 or 0 would be useful in bitwise operations without branching.
As a terrible example, take the following:
bool timesTwo;
int value;
//...
if(timesTwo)
value << 1;
//vs
value << (int) timesTwo;
The comparison operators, assuming that they have not been overloaded, only ever return
trueandfalse.int(true)is always 1.int(false)is always 0.So,