精華區beta Programming 關於我們 聯絡資訊
※ 引述《UNARYvvv (有趣生活)》之銘言: : ※ 引述《ephesians (ephesians)》之銘言: : : 讀到目前,我所領會的是, + 左右兩邊的運算式的計算次序不一定. : : 以原例 x=12; x=x+++++x;而言, : : + 左邊運算式是 x++, 右邊運算式是 ++x, 不規定哪個先處理. : : 有些實作先做左邊,就算你所算的,26. : : 許多則先從右邊處理,算出27 : : + 的結合性是右到左? 這是什麼意義,能不能舉個例子? : : 按照一般人理解數學式的次序, + groups left-to-right. : : 印象中,讀到的是 + 結合性左到右. : + 的 associativty 是 left to right,並不是 right to left : 簡單來說意思就是若你寫 a + b + c + d : 會以這樣子來結合: ( ( (a+b) + c ) + d ) : 左邊的先加完,得出的答案再去跟右邊的的相加 : 而先前的問題就在於一開始那個 a+b 的兩端 : 到底是 a 先求出還是 b 先求出 : (此處 a,b 不一定是單純的變數,也包括 x++ 這種情況) : 由於規格把這部份留給編譯器實作來決定 : 所以才發生可能會看到不同答案的情形 : 另外 associativty 為 right to left 的 operator : 其中一個例如 assignment : 寫 a=b=c; : 會以這樣結合: a = ( b = c ); : 右邊的部份先進行指派,得出結果再指派給左邊的 lvalue C 的associativity Type Associativity Operators L→R () [] –> . Unary R→L ! ~ + – * & (type) sizeof ++ –– Binary arithmetical L→R * / % Binary arithmetical L→R + – Shifts L→R << >> Comparisons L→R < <= > >= Comparisons L→R == != Binary bitwise L→R & Binary bitwise L→R ^ Binary bitwise L→R | Binary boolean L→R && Binary boolean L→R || Ternary R→L ?: Assignments R→L = += –= *= /= &= |= ^= <<= >>= C++ Level Operator Description Grouping 1 :: scope L->R 2 () [] . -> ++ -- dynamic_cast postfix L->R static_castreinterpret_cast const_cast typeid 3 ++ -- ~ ! sizeof new delete unary (prefix) R->L * & indirection and reference (pointers) + - unary sign operator 4 (type) type casting R->L 5 .* ->* pointer-to-member L->R 6 * / % multiplicative L->R 7 + - additive L->R 8 << >> shift L->R 9 < > <= >= relational L->R 10 == != equality L->R 11 & bitwise AND L->R 12 ^ bitwise XOR L->R 13 | bitwise OR L->R 14 && logical AND L->R 15 || logical OR L->R 16 ?: conditional R->L 17 = *= /= %= += -= >>= <<= &= ^= != assignment R->L 18 , comma L->R -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.153.213