在此代码中:
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";
一本书说?:运算符是正确关联的。我做了互联网搜索,所以我理解了关联性意味着什么。但我无法真正理解它对上述代码意味着什么。 C ++从做什么开始?此操作应该是左关联的,因为它应该从左侧开始,执行第一个条件,并在必要时继续执行第二个条件,而不是相反。
答案 0 :(得分:2)
操作员关联性与首先执行的操作无关。如果您有一个运算符@
,则关联性会告诉您是否
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"
,这没什么意义。)
答案 1 :(得分:1)
如果?:
是关联的,那么语句
finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";
将被视为
finalgrade = ((grade > 90) ? "high pass" : (grade < 60)) ? "fail" : "pass";
(在这种情况下)不会编译,因为"high pass"
和(grade < 60)
具有不同的类型。
由于它实际上是右关联的,因此该语句被视为
finalgrade = (grade > 90) ? "high pass" : ((grade < 60) ? "fail" : "pass");
答案 2 :(得分:0)
这很大程度上转化为:
我的最终成绩是否超过90?如果是这样,它被视为高通。否则低于60?如果是这样,它被视为失败。然后,如果结果不是90以上或60以下,那么它只被视为&#34;传递&#34;。