一般情况下,三木运算符需要两个表达式类型一致,但是如果出现不一致的地方也可以进行转换,转换是有一定的规则的。
下面我们来简单分析一下:
代码一:
cout << (1 > 2 ? 1 : "1") << endl;
代码二:
cout << (1 > 2 ? 0 : "1") << endl;
代码三:
cout << (1 > 2 ? "hello" : "hi") << endl;
- 结果是代码二和三编译通过,但是我们好奇的是二怎么可以通过呢?
因为0可以视为NULL,所以第二种类型会为const char*类型的。
但是打印NULL的时候会出现异常。