Implicit casts between booleans and numbers in C++

The lesson mentions that numeric types can be implicitly cast to booleans in C++, with 0 being false and anything else true. Can you clarify how that works with an example?

Certainly! In C++, numeric types like int and float can be implicitly converted to the bool type. When this happens:

  • The numeric value 0 (or 0.0, 0.0f, etc.) becomes false
  • Any non-zero numeric value becomes true

Here's an example:

#include <iostream>

int main() {
  bool value1 = 0;
  bool value2 = 1;
  bool value3 = -5;
  bool value4 = 0.0;
  bool value5 = 0.1f;

   // Prints bools as true/false instead of 1/0
  std::cout << std::boolalpha;

  std::cout << value1 << '\n';  // Outputs false
  std::cout << value2 << '\n';  // Outputs true
  std::cout << value3 << '\n';  // Outputs true
  std::cout << value4 << '\n';  // Outputs false
  std::cout << value5 << '\n';  // Outputs true
}
false
true
true
false
true

As you can see, the integer values 1 and -5 both evaluate to true, because they are non-zero. The integer 0 and the floating point 0.0 both evaluate to false.

The opposite is also possible (though less common). true implicitly converts to the integer value 1, and false converts to 0.

This implicit conversion allows us to use the result of boolean expressions in arithmetic operations. But it's generally clearer to avoid this and keep arithmetic and boolean logic separate.

Variables, Types and Operators

Learn the fundamentals of C++ programming: declaring variables, using built-in data types, and performing operations with operators

Questions & Answers

Answers are generated by AI models and may not have been reviewed. Be mindful when running any code on your device.

How does integer division work in C++?
Can you explain more about how integer division and the modulus operator work in C++, with some examples?
What is uniform initialization in C++?
The lesson recommends using uniform initialization with braces (like int x {5};) instead of the = operator. What advantages does this have?
When should I use auto in C++?
The auto keyword seems convenient, but the lesson says to use it sparingly. When is it appropriate to use auto in C++?
How does operator precedence work in C++?
Can you clarify the rules around operator precedence in C++? How can I control the order of operations?
Prefix vs postfix increment in C++
What's the difference between the prefix and postfix increment/decrement operators in C++? When should I use one over the other?
Floating point precision in C++
I've heard that floating point numbers can sometimes be imprecise in C++. Can you explain why this happens and how to handle it?
Or Ask your Own Question
Get an immediate answer to your specific question using our AI assistant