三元运算符,如果我避免写“表达式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.
THE END
二维码