c++ - C 与 C++ 中的三元运算符

标签 c++ c ternary-operator conditional-operator

<分区>

C 和 C++ 之间有很多差异,并且卡在其中之一 相同的代码在 C 中出错,而在 C++ 中执行良好 请说明原因

int main(void)
{
   int a=10,b;
   a>=5?b=100:b=200;
}

上面的代码在 C 中给出了一个错误,指出 lvalue 是必需的,而相同的代码在 C++ 中编译得很好

最佳答案

查看运算符优先级。

没有显式的 () 你的代码表现得像

( a >= 5 ? b = 100 :  b ) = 200;

?: 表达式的结果不是可修改的左值 [#] 因此我们不能赋值 它的任何值。

此外,值得一提的是,根据 c 语法规则,

assignment is never allowed to appear on the right hand side of a conditional operator

相关引用:C precedence table .

OTOH,在 c++ 的情况下,嗯,

the conditional operator has the same precedence as assignment.

并且从右到左分组,本质上使您的代码表现得像

 a >= 5 ? (b = 100) : ( b = 200 );

因此,您的代码在 c++

的情况下工作正常

[ # ] -- 根据第 6.5.15 章,脚注 (12),C99 标准,

A conditional expression does not yield an lvalue.

关于c++ - C 与 C++ 中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337054/

相关文章:

ruby - 具有 "defined?"的三元表达式返回 "expression"而不是值?

c++ - 迭代 std::map<...> 的简单方法?

c - 无法绘制带有 3D 图形的简单四边形

c - 从用户处读取c中的字符

c - 如何开始使用 C 语言的 ICU

c# - 需要使用 C# 三元条件运算符进行转换

c++ - C++中的文件命名

c++ - Linux 中的实时 RX 和 TX 速率

C++多线程生产者-消费者问题

javascript 三元运算符与 if/else 相反