Не все клавиатуры предоставляют возможность ввода символов, используемых для обозначения логических операций, поэтому в стандарте C++ предусмотрены их альтернативные представления, которые показаны в табл. 6.3. Идентификаторы and, or и not являются зарезервированными словами C++, а это значит, что их нельзя использовать в качестве имен переменных и тому подобного. Они не рассматриваются как ключевые слова, потому что являются альтернативными представлениями существующих средств языка. Кстати, они не являются зарезервированными словами в С, но в программах на С они могут применяться в качестве операций только при условии включения заголовочного файла iso646.h. В C++ этот файл не требуется.
Операция ?:
Язык С++ включает операцию, которая часто может использоваться вместо оператора if else. Она называется условной операцией, записывается как ?: и является единственной операцией C++, которая требует трех операндов. Ее общая форма выглядит следующим образом:
выражение1 ? выражение2 : выражениеЗ
Если выражение 1 истинно, то значением всего условного выражения будет значение выражение2. В противном случае значением всего выражения будет выражениеЗ. Ниже приведены два примера, демонстрирующие ее работу:
5>3?10:12
// 5 > 3 истинно, поэтому значением выражения будет 10
3== 9? 25 : 18
// 3 == 9 ложно, поэтому значением всего выражения будет 18
Первый пример можно перефразировать так: если 5 больше, чем 3, то выражение оценивается как 10; иначе оно оценивается как 12. В реальных ситуациях программирования выражения, конечно же, могут включать в себя переменные.
Код в листинге использует условную операцию для нахождения большего из двух значений.
#include <iostream>
int main()
{
using namespace std;
int a, b;
cout << "Enter two integers: ";
cin >> a >> b;
cout << "The larger of (" << a << " and " << b << ");
int c = a > b ? a : b;
// c = a if a > b, else c = b
cout << " is " << c << endl;
getchar();
getchar();
return 0;
}
Ключевой частью программы является следующий оператор:
int c = a>b?a : b;
Он выдает тот же результат, что и приведенные ниже операторы:
int с;
if (а > b)
с = а; else
с = b;
По сравнению с последовательностью if else условная операция более короткая, но на первый взгляд не так очевидна. Одно отличие между этими двумя подходами заключается в том, что условная операция порождает выражение, а потому — единственное значение, которое может быть присвоено или встроено в более крупное выражение, как это сделано в программе из листинга выше, где значение условного выражения присваивается переменной с.
Краткая форма и необычный синтаксис условной операции высоко ценится некоторыми программистами. Их любимый трюк, достойный порицания, состоит в использовании вложенных друг в друга условных выражений.