Тип выражения определяется во время компиляции, он не может зависеть от условий выполнения. Когда два результирующих выражения в условном (иначе говоря, третичном) выражении различаются, они должны быть преобразованы в общий тип, и это тип выражения в целом. Подробнее см. Тип возврата '?:' (Троичный условный оператор) .
В вашем случае a
предположительно int
, а (char)('A' + a - 10)
- char
, поэтому общий тип - int
, поэтому cout
использует свой метод для печати int
вместо char
.
Вместо третичного, используйте обычный if
:
if (a > 9) {
cout << static_cast<char>('A' + a - 10);
} else {
cout << a;
}
Или приведите к char
после выполнения условного.
cout << static_cast<char>(a > 9 ? ('A' + a - 10) : ('0' + a));