首页 > 解决方案 > 为什么 cout 与三进制和 int 一起使用时会打印 char 的 ascii 值?

问题描述

为什么此代码生成 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 语句,它就可以工作。为什么?

标签: c++charcoutternary

解决方案


三元表达式返回其真部分和假部分的“共同类型”,和之间的共同类型charintint所以'*'提升为int


推荐阅读