C++,条件运算符结合性

标签 c++ associativity

<分区>

在此代码中:

finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";

一本书说 ?: 运算符是右结合的。我进行了互联网搜索,所以我了解关联性的含义。但是我真的无法理解上面代码的含义。 C++ 从做什么开始?这个操作应该是左关联的,因为它应该从左边开始,执行第一个条件,并在必要时继续执行第二个条件,而不是相反。

最佳答案

运算符结合性与首先执行的操作无关。如果你有一个运算符 @,结合律会告诉你是否

a @ b @ c

应该理解为

(a @ b) @ c

a @ (b @ c)

在你的情况下,? ... : 像右结合运算符一样工作:

(grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass"

解析为

(grade > 90) ? "high pass" : ((grade < 60) ? "fail" : "pass")

换句话说,第一个 ?: 的“else 分支”包含另一个嵌套的 ?:

(如果它是关联的,它将是

((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass"

,这没什么意义。)

关于C++,条件运算符结合性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528128/

相关文章:

c++ - 整数乘法真的以与现代 CPU 上的加法相同的速度完成吗?

c++ - 实现与 float 一起使用的自定义 atomic_add()

haskell - 为什么 <$> 是左结合的?

c++ - 二元 boolean 运算符是否具有结合性?

parsing - 左关联运算符与右关联运算符

c++ - 这些数组类型有何不同?

C++ 复制构造函数对成员初始化进行双重调用

c++ - 如何 GC(删除)GetOpenFileName 的线程

python - 为什么将 reduce 与非关联运算符一起使用被认为是不好的风格?

c - C 中运算符的结合性