Вопрос «Что есть истина?» это тот, который вы ожидаете найти в книге по философии, а не в учебнике по программированию. Тем не менее, это хороший вопрос для нас. Если реляционное выражение может быть либо истинным, либо ложным, как эти значения представляются внутри программы? Как компьютер сохраняет true в памяти? Как он хранит false?

// This program demonstrates values stored in true and false
#include <iostream>
using namespace std;
int main()
{
  bool boolValue;
  boolValue = true;
  cout << boolValue << endl;
  boolValue = false;
  cout << boolValue << endl;
  return 0;
}

Если бы вы продемонстрировали эту программу, вы бы увидели, что эти два абстрактных состояния преобразуются в числа. В C++ реляционные выражения представляют истинные состояния цифрой 1 и ложные состояния цифрой 0.

Однако в мире оператора if понятие истины расширяется. 0 по-прежнему ложно, но все значения, кроме 0, считаются истинными. Это означает, что любое значение, даже отрицательное, представляет собой истину, если оно не равно 0. Как и в реальной жизни, истина — сложная вещь. Вот краткое изложение правил, которые вы видели до сих пор:

  • Когда относительное выражение истинно, оно имеет значение 1.
  • Когда относительное выражение ложно, оно имеет значение 0.
  • Любое выражение, имеющее значение 0, считается ложным оператором if. Сюда входит значение bool false, эквивалентное 0.
  • Любое выражение, имеющее любое значение, отличное от 0, считается истинным оператором if. Сюда входит bool значение true, эквивалентное 1.

Тот факт, что оператор if считает любое ненулевое значение истинным, открывает много возможностей. Реляционные выражения — не единственные условия, которые можно проверить. Например, следующая инструкция if в C++ допустима:

if (value)
  cout << "It's True";

Приведенный выше оператор if проверяет не реляционное выражение, а содержимое переменной. Если значение переменной содержит любое число, отличное от 0, будет отображено сообщение «Это правда». Если значение равно 0, оператор cout будет пропущен.

if (x + y)
  cout << "It's True";

В этом операторе сумма x и y проверяется так же, как и любое другое значение в операторе if: если сумма равна 0, то она ложна. Если сумма представляет собой любые другие значения, то это правда. Вы также можете использовать возвращаемое значение вызовов функций в качестве условных выражений.

if (pow(a, b))
  cout << "It's True";

Этот оператор if использует функцию pow, чтобы возвести a в степень b. Если результат отличен от 0, выполняется оператор cout. Это мощная техника программирования, которую вы можете использовать для оценки условных выражений, таких как определение диапазона переменной, выбор параметров меню и пометка ошибок в вашей программе.