三元运算符,如果我避免写“表达式2”,它会起作用,但如果我不写“表达式3”,则会出现错误

代码

#include<iostream>

int main()
{
    int a=4,b,c;
    a==3 ? : b=a*a ;     // Works fine
    a==4 ? c=a*a : ;     // ERROR Expected Primary expression before ;
}
  • 第一个条件语句

    我没有写“表达式 2 ”,但它不会产生错误

  • 第二个条件语句

    我没有写“表达式 3 ”,它给出了一个错误

那么为什么它在“表达式 2 ”和“表达式 3 ”中有所区别?

回答

这在 GNU C/C++ 中得到支持,称为Elvis 运算符。它在标准 C++ 中是不允许的(例如 MSVC++ 不支持它)。

它在官方文档中有描述

6.8 省略操作数的条件条件表达式中的中间操作数可以省略。然后如果第一个操作数非零,它的值就是条件表达式的值。

因此,表达式

X ?: 是

如果 x 非零,则具有 x 值;否则,y 的值。

这个例子完全等同于

X ?x : y

在这种简单的情况下,省略中间操作数的能力并不是特别有用。当它变得有用时,第一个操作数确实或可能(如果它是宏参数)包含副作用。然后在中间重复操作数将执行两次副作用。省略中间操作数会使用已计算的值,而不会产生重新计算的不良影响。

  • Thanks. This is something new about the possible ternary operator for me.

以上是三元运算符,如果我避免写“表达式2”,它会起作用,但如果我不写“表达式3”,则会出现错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>