Почему cout печатает ascii-значение char при использовании с троичным и целым числом? - PullRequest
1 голос
/ 22 июня 2019

Почему этот код выдает 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, оно работает.Почему?

Ответы [ 2 ]

3 голосов
/ 22 июня 2019

Тернарное выражение возвращает «общий тип» его истинной части и ложной части, а общий тип между char и int равен int, поэтому '*' повышается до int.

1 голос
/ 22 июня 2019

Найдена статья о гиках для гиков здесь

...