C、C++ 运算符优先级

from:http://zh.wikipedia.org/zh-hk/C和C%2B%2B運算子

以下是C++程式語言中的所有運算子的優先級結合性列表。

優先級運算子敘述示例重載性結合性
1 :: 作用域解析(C++專有) Class::age = 2; 由左至右
2 ++ 後綴遞增 i++  
-- 後綴遞減 i--  
{} 組合 {i++;a*=i;}  
() 函數調用或變量初始化 c_tor(int x, int y) : _x(x), _y(y * 10) {}  
[] 數組訪問 array[4] = 2;  
. 以對象方式訪問成員 obj.age = 34;
-> 以指針方式訪問成員 ptr->age = 34;  
dynamic_cast 運行時檢查類型轉換(C++專有) Y& y = dynamic_cast<Y&>(x);
static_cast 未經檢查的類型轉換(C++專有) Y& y = static_cast<Y&>(x);
reinterpret_cast 重定義類型轉換(C++專有) int const* p = reinterpret_cast<int const*>(0x1234);
const_cast 更改非常量屬性(C++專有) int* q = const_cast<int*>(p);
typeid 獲取類型信息(C++專有) std::type_info const& t = typeid(x);
3 ++ 前綴遞增 ++i   由右至左
-- 前綴遞減 --i  
+ 一元正號 int i = +1;  
- 一元負號 int i = -1;  
!
not
邏輯非
!的備用拼寫
if (!done) …  
~
compl
按位取反
~的備用拼寫
flag1 = ~flag2;  
(type) 轉換為給定的類型 int i = (int)floatNum;  
* 取指針指向的值 int data = *intPtr;  
& 某某的地址(參考) int *intPtr = &data;  
sizeof 某某的大小 size_t s = sizeof(int);
new 動態內存分配(C++專有) long* pVar = new long;  
new[] 動態數組內存分配(C++專有) long* array = new long[20];  
delete 動態內存釋放(C++專有) delete pVar;  
delete[] 動態數組內存釋放(C++專有) delete [] array;  
4 .* 成員對象選擇(C++專有) obj.*var = 24; 由左至右
->* 成員指針選擇(C++專有) ptr->*var = 24;  
5 * 乘法 int i = 2 * 4;  
/ 除法 float f = 10.0 / 3.0;  
% 模數(取余) int rem = 4 % 3;  
6 + 加法 int i = 2 + 3;  
- 減法 int i = 5 - 1;  
7 << 位元左移 int flags = 33 << 1;  
>> 位元右移 int flags = 33 >> 1;  
8 < 小於關係 if (i < 42) …  
<= 小於等於關係 if (i <= 42) ...  
> 大於關係 if (i > 42) …  
>= 大於等於關係 if (i >= 42) ...  
9 ==
eq
等於關係
==的備用拼寫
if (i == 42) ...  
!=
not_eq
不等於關係
!=的備用拼寫
if (i != 42) …  
10 &
bitand
位元 AND
&的備用拼寫
flag1 = flag2 & 42;  
11 ^
xor
位元 XOR(獨佔or)
^的備用拼寫
flag1 = flag2 ^ 42;  
12 |
bitor
位元 OR(包含or)
|的備用拼寫
flag1 = flag2 | 42;  
13 &&
and
邏輯 AND
&&的備用拼寫
if (conditionA && conditionB) …  
14 ||
or
邏輯 OR
||的備用拼寫
if (conditionA || conditionB) ...  
15 c?t:f 三元條件運算 int i = a > b ? a : b; 由右至左
16 = 直接賦值 int a = b;  
+= 以和賦值 a += 3;  
-= 以差賦值 b -= 4;  
*= 以乘賦值 a *= 5;  
/= 以除賦值 a /= 2;  
%= 以取餘數賦值 a %= 3;  
<<= 以位元左移賦值 flags <<= 2;  
>>= 以位元右移賦值 flags >>= 2;  
&=
and_eq
以位元AND賦值
&=的備用拼寫
flags &= new_flags;  
^=
xor_eq
以位元XOR賦值
^=的備用拼寫
flags ^= new_flags;  
|=
or_eq
以位元OR賦值
|=的備用拼寫
flags |= new_flags;  
17 throw 拋出異常 throw EClass(「Message」);
18 , 逗號 for (i = 0, j = 0; i < 10; i++, j++) …   由左至右

[編輯]列表

在本表中,abc代表有效值(來自變數或返回值的逐字常數或數值)、物件名稱,或適當的左值。

[編輯]算術運算子

運算子名稱語法可重載C裡有
一元正號 +a
加法(總和) + b
前綴遞增 ++a
後綴遞增 a++
以加法賦值 += b
一元負號(取反) -a
減法(差) - b
前綴遞減 --a
後綴遞減 a--
以減法賦值 -= b
乘法(乘積) * b
以乘法賦值 *= b
除法(分之) / b
以除法賦值 /= b
模數(餘數) % b
以模數賦值 %= b

[編輯]比較運算子

運算子名稱語法可重載C裡有
小於 < b
小於或等於 <= b
大於 > b
大於或等於 >= b
不等於 != b
等於 == b
邏輯取反 !a
邏輯 AND && b
邏輯 OR || b

[編輯]位元運算子

運算子名稱語法可重載C裡有
位元左移 << b
以位元左移賦值 <<= b
位元右移 >> b
以位元右移賦值 >>= b
位元一的補數 ~a
位元 AND & b
以位元 AND 賦值 &= b
位元 OR | b
以位元 OR 賦值 |= b
位元 XOR ^ b
以位元 XOR 賦值 ^= b

[編輯]其它運算子

運算子名稱語法可重載C裡有
基本賦值 = b
函式呼叫 a()
陣列下標 a[b]
間接(向下參考) *a
的位址(參考) &a
成員指標 a->b
成員 a.b
間接成員指標 a->*b
間接成員 a.*b
轉換 (type) a
逗號 , b
三元條件 ? b : c
作用域解析 a::b
的大小 sizeof a
類型識別 typeid type
分配儲存區 new type
解除分配儲存區 delete a

[編輯]語言擴展

運算子名稱語法可重載C裡有提供者
標籤值 && label GCC
取得型態 typeof a
typeof(expr)
GCC
最小/最大值 <? b
>? b
GCC

[編輯]註解

posted @ 2011-12-01 00:50  庚武  Views(597)  Comments(0Edit  收藏  举报