【问题标题】:Assignment inside ternary operator doens't work in c三元运算符内的赋值在c中不起作用
【发布时间】:2021-08-04 06:13:41
【问题描述】:

为什么这在 C 上不起作用,但在 C++ 上起作用?

(0) ? a = 1 : a = 2;

【问题讨论】:

  • C 和 C++ 是不同的语言。最好只是假装注意到你从另一部作品中知道。
  • @NathanOliver 确实如此,但基本语法中有足够多的重叠,有趣的是这不同。

标签: c++ c conditional-operator


【解决方案1】:

语言在运算符优先级上有所不同。

C++中,三元运算符与赋值运算符具有相同的优先级,带有注释

条件运算符中间的表达式(在?: 之间)被解析为带括号的:它相对于?: 的优先级被忽略。

C 中,三元运算符的优先级高于赋值。它对中间表达式也有相同的注释。

这意味着在 C 中,表达式被解析为好像它被括号括起来:

((0) ? (a = 1) : a) = 2;

这是无效的,因为条件表达式不返回 L 值。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2013-06-28
    • 2012-02-14
    • 2013-08-13
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多