c - 三元运算符中的赋值
问题描述
对于三元运算符,为什么以下编译:
a > b ? a=4 : ' ';
但是这个没有:
a > b ? ' ' : b=4;
左值需要作为赋值的左操作数
也就是说,是什么使案例与分配true
案例不同?false
解决方案
它与条件运算符的正式定义有关。从C 标准的第 6.5.15 节:
conditional-expression: logical-OR-expression logical-OR-expression ? expression : conditional-expression
条件的第二个子句可以是任何表达式,而第三个子句只能是一个条件表达式(其中 as assignment 不是)。换句话说,条件运算符?:
的优先级高于赋值运算符=
。
所以这:
a > b ? a=4 : ' '
与此相同:
(a > b) ? (a=4) : (' ')
但是这个:
a > b ? ' ' : b=4;
与此相同:
((a > b) ? (' ') : b)=4;
并且不能将条件运算符的结果分配给(即它不是左值),因此会出现错误。
如果添加括号,您可以获得编译的内容:
a > b ? ' ' : (b=4);
当然,这些语句看起来不是条件的最佳用例,可能应该重写为:
if (a>b) a=4;
和:
if (a<=b) b=4;
推荐阅读
- bash - 在一列中使用 awk 获取带有空格的字段
- python - 请帮助尝试从使用 python 和 numpy 排序和打印的 csv 文件中获取前 20 个值
- java - 将 json 数组字段更改为字符串
- .net-core - 下拉触发的 Blazor 'ChangeEventArgs' 始终包含一个字符串作为值
- javascript - 对变量绑定感到困惑
- omnet++ - 数据包有位错误。丢失。数据包未正确接收,将其作为控制消息发送给上层
- c - 当 GOARCH=386 并导入“C”时,Go Build 错误“构建约束排除所有 Go 文件”
- laravel - Laravel 背包 - 表格选项
- graph - Neo4J 考虑到以前的分组,将人员与其他人进行唯一分组,这样他们就不会尽可能与同一个人分组两次
- python - 在 Cloud Dataflow 上安装 confluent-kafka 时出错