Урок 4. Ограничения, связанные с безопасностью типов

Тип результата работы тернарного оператора должен или совпадать с типом переменной, куда он будет присваиваться, или он должен быть преобразован (явно или же неявно) до присвоения. С этого следует, что в следующем коде будет ошибка:

int a = 1;
double b = 0.0;
int max;

max = (a > b) ? a : b;

Для её решения существует два способа:

  1. Преобразовать возвращаемое значения работы тернарного оператора:
    max = (int)((a > b) ? a : b);
    Данный способ не является лучшим, ведь в случаи если условие истинно возвращаемое значение работы тернарного оператора и так будет типа int, поэтому в этом случаи произойдёт лишнее преобразование.
  2. Преобразовывать возвращаемое значение выражения у которого тип не совпадает с необходимым:
    max = (a > b) ? a : (int)b;

В таком случае можно избежать лишнего преобразования при истинности условия.

Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №4. УСЛОВНЫЕ КОНСТРУКЦИИ"

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202