2014-01-30 130 views

回答

4

當具有相同優先級的運營商打交道是指運營商關聯 - http://en.wikipedia.org/wiki/Operator_associativity

例如加號和減號聯想到左側,5 + 6 - 7 = (5 + 6) - 7
另一方面,一些運營商與右側相關聯,其中一個例子是賦值運算符。
a = b = c相當於a = (b = c)。在這種情況下,b = c返回c並允許您鏈接分配。與運算符優先級規則一樣,這些可能難以記憶,所以如果不確定將所有內容放在括號中。

在你的情況下,所有的運營商關聯到左邊,這樣

c.e->d.f == a.b相當於(((c.e)->d).f) == (a.b)

1

嘛,就像你說的,.。和->具有相同的優先級,高於==。這意味着您發佈的表達式代表c.e->d.fa.b之間的平等比較。

c.e->d.f代表運營商->應用到值c.e。然後,.又適用於c.e->d的值。

換句話說,整個事情就相當於

(((c.e)->d).f) == (a.b) 

注意,()只能說明運營商和它們的操作數之間的分組。對評估的運行順序沒有任何形式的保證。

0

使用元件選擇運營商後綴表達式的語法如下:

6.5.1基本表達式

語法
 
1 primary-expression: 
    identifier 
    ... 
6.5.2郵政網絡運營商X

語法

 
1 postfix-expression: 
    primary-expression 
    ... 
    postfix-expression.identifier 
    postfix-expression->identifier 
    ... 

基於該語法,元件選擇運營商左結合。因此,像a->b.c的表達式將被解析爲


        a ->  b  .  c 
        |   |    | 
       identifier  |    | 
        |   |    | 
        primary  |    | 
       expression  |    | 
        |   |    | 
       postfix  |    | 
       expression identifier  | 
        |   |    | 
        +-----+-----+    | 
          |     | 
         postfix   identifier 
        expression    | 
          |     | 
          +---------+---------+ 
            | 
          postfix expression 

(a->b).c。最左邊的.->首先結合,而其餘的.->結合第一個結果。因此,你的例子解析爲

(((c.e)->d).f) == (a.b) 

因爲.->==具有更高的優先級。