通用原型:exp1?exp2:exp3
三元运算符的返回类型为exp2。exp3必须具有与exp2相同的返回类型,或者至少具有隐式转换。否则会抛出错误
在下面的程序中,由于exp3为int而exp2为char *,我在CodeBlocks中收到了预期的错误。Bjut将1替换为0时,它正在打印0。
0也是一个整数值,我听不懂。
#include <iostream>
using namespace std;
int main()
{
int test = 0;
cout << test ? "A String" : 1;
return 0;
}
三元运算符的优先级较低。唯一具有较低优先级的运算符是逗号运算符。因此,您的表情被解释为
(std::cout << test) ? "A String": 1;
这可能不是您想要的。但是,您的问题实际上是关于两个表达式之间的区别:
表达方式
expr? "A String": 1
之所以不起作用,是因为在字符串文字(即type char const(&)[9]
)和整数文字(即type)之间没有通用的类型int
。
表达方式
expr? "A String": 0
之所以有效,是因为它0
可以被认为是一个指针常量,并且字符串文字会愉快地衰减为a char const*
。
正如Chris Culter所指出的那样,值得注意的是,根据27.7.3.6.4 [ostream.inserter.character]第3段,将空指针与输出运算符一起使用是未定义的行为:
template<class traits> basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>& out, const char* s);
[...]
要求:s不能为空指针。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句