三元运算符的意外结果

Unexpected result from ternary operator

我想了解三元运算符在 C++ 中的工作原理。

我希望看到两个打印语句的输出相同,但第二个打印语句输出 49。

这是为什么?

#include <iostream>
using namespace std;

int main()
{
    int test = 0;
    cout << "First character " << '1' << endl;
    cout << "Second character " << (test ? 3 : '1') << endl;

    return 0;
}

输出:

第一个字符 1
第二个字符 49

“1”已转换为表示“1”的 ASCII 码的整数。三元运算符应该有两个相同类型的值。不能有 3(整数)和 '1'(字符)。这就是转变发生的原因。如果隐式转换无法发生,则会产生编译器错误。