優先級數字越小優先級越高;同優先級才看結合律(左結合或右結合)。
| 優先級 | 運算符 | 結合律 |
|---|---|---|
| 1 | () [] -> . | 左到右 |
| 2 | ! ~ ++ -- + - * & (type) sizeof | 右到左 |
| 3 | * / % | 左到右 |
| 4 | + - | 左到右 |
| 5 | << >> | 左到右 |
| 6 | < <= > >= | 左到右 |
| 7 | == != | 左到右 |
| 8 | & | 左到右 |
| 9 | ^ | 左到右 |
| 10 | | | 左到右 |
| 11 | && | 左到右 |
| 12 | || | 左到右 |
| 13 | ?: | 右到左 |
| 14 | = += -= ... | 右到左 |
| 15 | , | 左到右 |
cout << "Hello" << "World";
// 解析: ((cout << "Hello") << "World")
// 第二個 << 左側整體為表達式值(cout),右側只取最近操作數。
a + b + c // ((a + b) + c)
(* ( (void (*)())0 ) )()
// 解析: (void (*)())0 先結合 → 強制轉型為函數指針
// * (...) 解引用 → 函數指針
// (...)() 調用 → 軟件復位
ph->pNext->pNext->pNext
// 依次結合: ((ph->pNext)->pNext)->pNext
// 每步返回下一節點指針,最終得第 4 節點的 pNext。
a = 3*5 , a*4
// 優先級: = > , 所以先執行 a=15,再算 a*4=60
// 整個表達式值為 60(逗號表達式取最後一項)。