Почему этот код выдает 42012 вместо *012? Я вижу, что он преобразует звездочку в значение ASCII, но почему?
vector<int> numbers = {-1,0,1,2};
for(int num: numbers){
cout << (num == -1 ? '*' : num); //42012
}
for(int num: numbers){
if (num == -1) cout << '*'; //*012
else cout << num;
}
Если я использую обычный оператор if else, он работает. Почему?
Тернарное выражение возвращает «общий тип» своей истинной части и ложной части, а общий тип между char
и int
— это int
, поэтому '*'
повышается до int
.
Нашел об этом статью для гиков здесь
Смотрите: stackoverflow.com/questions/56634198/… , проблема другая, причина та же