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++) … |
|
由左至右 |
在本表中,a
、b
和c
代表有效值(來自變數或返回值的逐字常數或數值)、物件名稱,或適當的左值。
[編輯]算術運算子
|
運算子名稱 | 語法 | 可重載 | C裡有 |
一元正號 |
+a |
是 |
是 |
加法(總和) |
a + b |
是 |
是 |
前綴遞增 |
++a |
是 |
是 |
後綴遞增 |
a++ |
是 |
是 |
以加法賦值 |
a += b |
是 |
是 |
一元負號(取反) |
-a |
是 |
是 |
減法(差) |
a - b |
是 |
是 |
前綴遞減 |
--a |
是 |
是 |
後綴遞減 |
a-- |
是 |
是 |
以減法賦值 |
a -= b |
是 |
是 |
乘法(乘積) |
a * b |
是 |
是 |
以乘法賦值 |
a *= b |
是 |
是 |
除法(分之) |
a / b |
是 |
是 |
以除法賦值 |
a /= b |
是 |
是 |
模數(餘數) |
a % b |
是 |
是 |
以模數賦值 |
a %= b |
是 |
是 |
[編輯]比較運算子
|
運算子名稱 | 語法 | 可重載 | C裡有 |
小於 |
a < b |
是 |
是 |
小於或等於 |
a <= b |
是 |
是 |
大於 |
a > b |
是 |
是 |
大於或等於 |
a >= b |
是 |
是 |
不等於 |
a != b |
是 |
是 |
等於 |
a == b |
是 |
是 |
邏輯取反 |
!a |
是 |
是 |
邏輯 AND |
a && b |
是 |
是 |
邏輯 OR |
a || b |
是 |
是 |
[編輯]位元運算子
|
運算子名稱 | 語法 | 可重載 | C裡有 |
位元左移 |
a << b |
是 |
是 |
以位元左移賦值 |
a <<= b |
是 |
是 |
位元右移 |
a >> b |
是 |
是 |
以位元右移賦值 |
a >>= b |
是 |
是 |
位元一的補數 |
~a |
是 |
是 |
位元 AND |
a & b |
是 |
是 |
以位元 AND 賦值 |
a &= b |
是 |
是 |
位元 OR |
a | b |
是 |
是 |
以位元 OR 賦值 |
a |= b |
是 |
是 |
位元 XOR |
a ^ b |
是 |
是 |
以位元 XOR 賦值 |
a ^= b |
是 |
是 |
[編輯]其它運算子
|
運算子名稱 | 語法 | 可重載 | C裡有 |
基本賦值 |
a = b |
是 |
是 |
函式呼叫 |
a() |
是 |
是 |
陣列下標 |
a[b] |
是 |
是 |
間接(向下參考) |
*a |
是 |
是 |
的位址(參考) |
&a |
是 |
是 |
成員指標 |
a->b |
是 |
是 |
成員 |
a.b |
否 |
是 |
間接成員指標 |
a->*b |
是 |
否 |
間接成員 |
a.*b |
否 |
否 |
轉換 |
(type) a |
是 |
是 |
逗號 |
a , b |
是 |
是 |
三元條件 |
a ? b : c |
否 |
是 |
作用域解析 |
a::b |
否 |
否 |
的大小 |
sizeof a |
否 |
是 |
類型識別 |
typeid type |
否 |
否 |
分配儲存區 |
new type |
是 |
否 |
解除分配儲存區 |
delete a |
是 |
否 |
[編輯]語言擴展
運算子名稱 | 語法 | 可重載 | C裡有 | 提供者 |
標籤值 |
&& label |
否 |
是 |
GCC |
取得型態 |
typeof a
typeof(expr) |
否 |
是 |
GCC |
最小/最大值 |
a <? b
a >? b |
否 |
否 |
GCC |