Tan*_*ena 2 c++ ternary-operator
通用原型:exp1?exp2:exp3
三元运算符的返回类型为exp2.exp3必须具有与exp2相同的返回类型,或者至少具有隐式转换.否则会抛出错误
在下面的程序中,我在CodeBlocks中遇到错误,因为exp3是int而exp2是char*.Bjut当我用0替换1时,它正在打印0 ..
0也是一个int值.我无法理解.
#include <iostream>
using namespace std;
int main()
{
int test = 0;
cout << test ? "A String" : 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
三元运算符的优先级相当低.优先级较低的唯一运算符是逗号运算符.因此,您的表达式被解释为
(std::cout << test) ? "A String": 1;
Run Code Online (Sandbox Code Playgroud)
这可能不是你想要的.但是,您的问题实际上是关于两个表达式之间的区别:
表达方式
expr? "A String": 1
Run Code Online (Sandbox Code Playgroud)
因为字符串文字(即类型char const(&)[9])和整数文字(即类型)之间没有共同类型,因此无效int.
表达方式
expr? "A String": 0
Run Code Online (Sandbox Code Playgroud)
正在工作,因为0可以认为是一个指针常量,字符串文字很乐意衰为a char const*.
值得注意的是,正如Chris Culter指出的那样,根据27.7.3.6.4 [ostream.inserter.character]第3段,对输出运算符使用空指针是未定义的行为:
Run Code Online (Sandbox Code Playgroud)template<class traits> basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>& out, const char* s);[...]
要求:s不应为空指针.