我尝试根据运算符优先级来计算表达式,并得到相当混乱的结果。
这是表达式:a.b(c).d(e,f)。
它由成员访问和函数调用操作符组成。 根据{{3}} 成员访问运算符具有从左到右的关联性和比函数调用运算符更高的优先级。
所以在上面的表达式中,第二个成员访问必须在第一次函数调用之前发
那么我错过了什么?
答案 0 :(得分:2)
成员访问运算符具有从左到右的关联性,并且优先于函数调用运算符。
这仅表示a.b(c)
被评估为(a.b)(c)
,而不是a.(b(c))
(无论如何都是无效的)。
因此,在上面的表达式中,第二个成员访问必须在第一个函数cal
之前发生
怎么可能? foo().bar
表示访问函数调用的返回值的属性bar
。如果必须在电话之前发生,应该访问哪个属性?
或者在您的示例中,应该访问哪个对象.d
? a
? a.b
?