<分区>
在此代码中:
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";
一本书说 ?: 运算符是右结合的。我进行了互联网搜索,所以我了解关联性的含义。但是我真的无法理解上面代码的含义。 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/