Тип результата работы тернарного оператора должен или совпадать с типом переменной, куда он будет присваиваться, или он должен быть преобразован (явно или же неявно) до присвоения. С этого следует, что в следующем коде будет ошибка:
int a = 1;
double b = 0.0;
int max;
max = (a > b) ? a : b;
Для её решения существует два способа:
- Преобразовать возвращаемое значения работы тернарного оператора:
max = (int)((a > b) ? a : b);
Данный способ не является лучшим, ведь в случаи если условие истинно возвращаемое значение работы тернарного оператора и так будет типаint
, поэтому в этом случаи произойдёт лишнее преобразование. - Преобразовывать возвращаемое значение выражения у которого тип не совпадает с необходимым:
max = (a > b) ? a : (int)b;
В таком случае можно избежать лишнего преобразования при истинности условия.
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №4. УСЛОВНЫЕ КОНСТРУКЦИИ"