The
C language does not have a boolean type. Instead, it uses integer under the following general rules:
- An operation which requires a boolean value takes an integer and treats zero as false and any other value as true.
- An operation which produces a boolean value generates 1 or 0 for true and false.
The C++ committee eventually added a boolean type to C++ (and called it bool, just to keep you from spelling right the first time). To maintain compatibility with C, it converts freely to and from integer under similar rules. Specifically:
- When an integer is used in a boolean context, it is converted under similar rules: zero becomes false, and nonzero becomes true.
- When a bool is used in an int context, it is converted to 1 or 0, for true or false.
The result is very similar behavior in either dialect, produced from different formal type rules.
Relational Operatorscpp code
== != < <= > >=
C: Result is 1 or 0.
C++: Result is true or false.
Logical Operatorscpp code
&& ||
In C: expect integer values, treating zero as false and non-zero as true. Produce 1 or 0.
In C++: expect boolean values. If integer(s) are present, convert to bool using the rule that zero converts to false, nonzero converts to true. Produce true or false.
Short circuit
cpp code
if(n != 0 && sum / n > 1.0) ...
Conditional Operatorcpp code
expr_test ? expr_true : expr_false
When you want an if, but need an expression.
cpp code
max = a < b ? b : a;
printf("Max is ", a < b ? b : a);