В С++ есть условная операция, очень похожая на условный оператор выбора if else. Условная операция «? :» называется тернарной операцией (то есть трёхместная (имеет три операнда), единственная в C++).
Форма записи тернарной операции в C++
"условие" ? "выражение 1" : "выражение 2";
Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2.
Пример:
a > b ? cout << a : cout << b; // если а > b, то выполняется cout << a, иначе выполняется cout << b
Таким образом, если, а > b
напечатать а
, иначе напечатать b
. То есть, программа печатает большее из чисел. Использование условной операции может в некоторых случаях упрощать код, тогда как воспользоваться оператором if else
таким же образом не возможно. Вернёмся к старой задаче из раздела Оператор выбора if else, напомню условие данной задачи.
// uslovnaya_operatsiya.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int x; cout << "Enter x: "; cin >> x; // вводим значение икса cout << "y = " << (x < 0 ? x : (x >= 0) && (x < 30) ? 0 : x * x ) << endl; // две тернарные операции system("pause"); return 0; }
Перед тем как приступить к разбору задачи просто сравним на сколько уменьшился код задачи с использованием оператора условного выбора if else
и тернарной операции. Код уменьшился в два раза, а это уже не плохое достижение. Как Вы уже заметили, весь алгоритм записан в строке 12, а именно две вложенные тернарные операции. Первая условная операция проверяет меньше нуля x
или нет, если меньше, то выводится значение икса. Иначе выполняется проверка второго условия (x >= 0) && (x < 30)
, это условие содержится внутри второй тернарной операции. Если это условие верно, то выводится 0, иначе печатается квадрат икса. Вот так сработала программа (см. Рисунок 1).
? :
if else
.
Комментарии
Усман Алхатов
а можно вместо X что-нибудь из текста написать , ну например «ноль» или как-то так?))
Elijah
Задача: найти максимальное среди трех чисел. Решил воспользоваться тернарным оператором. Пишу в DEV-C++.
Ошибка в 7 и 9 строке: [Error] expected primary-expression before ‘?’ token
Elijah
Всё, нашел ошибку — не пишите if если используете тернарный оператор
Влад Секретович
омг, он и есть за место if
Светлана Дудэ
А почему в 9 строке не указана вторая переменная y ? разве ее не нужно объявлять ?
UndergroundChamber
Потому что переменной у нет. В 12й строке выводится значение выражения (x < 0 ? x : (x >= 0) && (x < 30) ? 0 : x * x ).
Если бы переменная у существовала, то ей было бы присвоено значение выражения и мы бы написали cout << «y = » << y;
А так в решении выше просто сэкономили на переменной у.
sasha3ks
А если бы в нашем условии было больше вариантов, то можно было продолжать тернарную функции до бесконечности или у неё есть какой-то предел?
admin
Предположительно, ограничений никаких нет.