В С++ есть условная операция, очень похожая на условный оператор выбора 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
#include <iostream> int a,b,c,max,min; int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); std::cin>>a>>b>>c; if (a>b) ? max=a : max=b; if (c>max) max=c; if (a<b) ? min=a : min=b; if (c<min) min=c; std::cout<<max-min; return 0; }Elijah
Всё, нашел ошибку — не пишите if если используете тернарный оператор
Влад Секретович
омг, он и есть за место if
Светлана Дудэ
А почему в 9 строке не указана вторая переменная y ? разве ее не нужно объявлять ?
UndergroundChamber
Потому что переменной у нет. В 12й строке выводится значение выражения (x < 0 ? x : (x >= 0) && (x < 30) ? 0 : x * x ).
Если бы переменная у существовала, то ей было бы присвоено значение выражения и мы бы написали cout << «y = » << y;
А так в решении выше просто сэкономили на переменной у.
sasha3ks
А если бы в нашем условии было больше вариантов, то можно было продолжать тернарную функции до бесконечности или у неё есть какой-то предел?
admin
Предположительно, ограничений никаких нет.