Ternery运算符在C ++中的奇怪行为

塔努·萨克塞纳(Tanu saxena)

通用原型: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;
   }
迪特玛·库尔(DietmarKühl)

三元运算符的优先级较低。唯一具有较低优先级的运算符是逗号运算符。因此,您的表情被解释为

(std::cout << test) ? "A String": 1;

这可能不是您想要的。但是,您的问题实际上是关于两个表达式之间的区别:

  1. 表达方式

    expr? "A String": 1
    

    之所以不起作用,是因为在字符串文字(即type char const(&)[9])和整数文字(即type)之间没有通用的类型int

  2. 表达方式

    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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ternery运算符在C ++中的奇怪行为

来自分类Dev

如何在ternery运算符中赋值

来自分类Dev

C#+运算符的奇怪行为

来自分类Dev

node.js中的奇怪&&运算符行为

来自分类Dev

node.js中的奇怪&&运算符行为

来自分类Dev

stl::map 中运算符 [] 的奇怪行为

来自分类Dev

C ++代码中的奇怪运算符

来自分类Dev

奇怪的C ++运算符(运算符unsigned short())

来自分类Dev

PHP'and'运算符的奇怪行为

来自分类Dev

Python:和/或运算符奇怪的行为

来自分类Dev

模板运算符的奇怪行为<<

来自分类Dev

递减运算符的奇怪行为

来自分类Dev

C ++中的“ << / >>”运算符

来自分类Dev

+ = C ++中的运算符

来自分类Dev

C ++结构中的奇怪行为

来自分类Dev

C ++中奇怪的引用行为

来自分类Dev

C中运算符优先级的奇怪结果

来自分类Dev

C ++指针,++运算符行为

来自分类Dev

C中“,”运算符的行为不清楚

来自分类Dev

将运算符定义为类中的朋友的奇怪行为

来自分类Dev

在子类Subregex中覆盖Regexp的=〜运算符,在执行“ example” =〜subregexex时会产生奇怪的行为

来自分类Dev

ijavascript。函数调用作为三元运算符中的条件。奇怪的行为

来自分类Dev

borland turboC++ 中奇怪的运算符优先级和赋值行为

来自分类Dev

Laravel - Ternery 运算符

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

什么是C / C ++中的“->”运算符?

来自分类Dev

算术中奇怪的python'is'运算符

来自分类Dev

算术中奇怪的python'is'运算符

来自分类Dev

奇怪的行为:函数的三元运算符