r.b*_*waj 4 c ternary-operator
在GCC编译器中编译给定程序时:
int main()
{
int a=2,b=3;
(a>1)?b=10:b=50;
printf("%d",b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它显示错误"左值作为左操作数需要"
但是如果我写第4行
(a>1)?b=10:(b=50);
然后它显示没有编译错误.谁能解释一下为什么?
它还有什么不同于......其他......?
正如评论中所提到的,运营商优先级存在问题.您的代码解释如下:
((a > 1) ? b = 10 : b) = 50;
Run Code Online (Sandbox Code Playgroud)
上述代码无效,原因与写入(b = 10) = 50无效相同 .
代码可以更清楚地写成:
b = a > 1 ? 10 : 50;
Run Code Online (Sandbox Code Playgroud)
它还有什么不同于......其他......?
条件运算符仅适用于表达式作为操作数.一个if语句可以包含的语句在体内.
条件运算符始终可以替换为等效if语句.但反过来却不正确 - 有if语句无法用等效的条件运算符表达式替换.
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |