#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
第二个字符1
但输出是
第一个字符1
第二个字符49
在阅读三元运算时,我在geeksforgeeks上发现了这一点。但我不了解副作用和返回类型的概念,请问有人能以简单的方式清除它吗?
答案 0 :(得分:4)
the conditional (or ternary) operator的结果类型是两个分支的 common 类型。在您的情况下,它是int
(因为char
可以很容易地隐式转换为int
,但并非总是相反)。如果没有任何常见类型,那就是错误。
您得到49
,因为它恰好是系统为'1'
(ASCII)编码的值。