Трактовка истинности
Операции увеличения и уменьшения на 1
Объединение действий с присваиванием
В программах нередко одна и та же переменная используется в левой и правой части операции присваивания, например:
x = x + 5;
C++ позволяет сократить запись таких действий при помощи операций типа "выполнить операцию и присвоить":
x += 5;
то есть запись вида
операнд_1 операция = операнд_2 ;
означает, что операнд операнд_1 вначале используется как левый операнд операции операция, а затем, как левый операнд операции присваивания полученного результата.
Такие составные операции присваивания определены для всех арифметических, а также для всех поразрядных (побитовых) операций, описанных в разделе 9.1. Как и в случае простой операции присваивания, значением любой составной операции присваивания является значение ее левого операнда после присваивания.
Очень часто в программе приходится увеличивать или уменьшать значение переменной на единицу. Чтобы сделать эти действия наиболее эффективными и удобными для использования, в C++ имеются специальные знаки операций: ++ (увеличить на единицу) и -- (уменьшить на единицу):
i++; // или ++i;
j--; // или --j;
Эти операции часто называют операциями, соответственно, инкрементирования и декрементирования. Имеются две формы этих операций: префиксная (знаки операции располагаются слева от операнда) и постфиксная (знаки операции располагаются справа от него).
Различие в действии двух форм операций ++ и -- сказывается, если эти операции используются в более сложном выражении. Тогда префиксная операция означает изменение значения операнда до его использования в выражении, а постфиксная – после.
В C++ применяется расширенное толкование истинности. Оно заключается в том, что в условиях можно использовать не только логические, но и числовые выражения. При определении истинности числовых выражений (то есть, при преобразовании числовых значений в логические) ноль преобразуется в значение false, любое ненулевое числовое значение – в значение true.
Логические выражения, в свою очередь, могут использоваться в числовых выражениях. В таких случаях значение false преобразуется в числовое значение 0, а значение true – в числовое значение 1.
3.5. Операция ?
C++ имеет очень мощную тернарную операцию ?, которую можно использовать вместо конструкции if-else все с той же целью – сокращения записи программ. Операция ? имеет следующий вид:
операнд_1 ? операнд_2 : операнд_3
где операнд_1, операнд_2 и операнд_3 – это выражения.
Результатом выполнения операции ? является значение второго или третьего операнда в зависимости от истинности первого. Если логическим значением первого операнда является true, результатом операции является значение второго операнда, если false – третьего. Пример:
y = x >= 9 ? 100 : 200;
3.6. Операция «запятая»
Знак “запятая” часто используется для разделения элементов каких-либо последовательностей (например, при пречислении объявляемых переменных или параметров функции).
Кроме того, в языке определена операция “запятая”, которая связывает (группирует) два или более действий (выражений) и обеспечивает их последовательное выполнение (вычисление). Приоритет операции "запятая" ниже, чем у всех остальных операций C++.
Если операция "запятая" связывает два выражения, первым вычисляется значение ее левого операнда. Значением же операции "запятая" является значение выражения, находящегося справа от нее. Операций "запятая" в выражении может быть несколько, в этом случае они выполняются слева направо, а значением всего выражения будет значение самого правого операнда.