优先级 | 运算符 | 含义 | 结合方向 |
---|---|---|---|
1 | :: | 域运算符 | 左→右 |
2 | () | 括号,函数调用 | 左→右 |
[] | 数组下标运算符 | ||
-> | 指向成员运算符 | ||
. | 成员运算符 | ||
++ | 自增运算符(后置) | ||
- - | 自减运算符(后置) | ||
3 | ++ | 自增运算符(前置) | 右→左 |
- - | 自减运算符(前置) | ||
~ | 按位取反运算符 | ||
! | 逻辑非运算符 | ||
- | 负号运算符 | ||
+ | 正号运算符 | ||
* | 指针运算符 | ||
& | 取地址运算符 | ||
(类型) | 类型转换运算符 | ||
sizeof | 长度运算符 | ||
new | 动态分配空间运算符 | ||
delete | 释放空间运算符 |
以上均为单目运算符。
优先级 | 运算符 | 含义 | 结合方式 |
---|---|---|---|
4 | * | 乘法运算符 | 左→右 |
/ | 除法运算符 | ||
% | 求余运算符 | ||
5 | + | 加法运算符 | 左→右 |
- | 减法运算符 | ||
6 | << | 按位左移运算符 | 左→右 |
>> | 按位右移运算符 | ||
7 | <、<=、>、>= | 关系运算符 | 左→右 |
8 | == | 等于运算符 | 左→右 |
!= | 不等于运算符 | ||
9 | & | 按位与运算符 | 左→右 |
10 | ^ | 按位异或运算符 | 左→右 |
11 | | | 按位或运算符 | 左→右 |
12 | && | 逻辑与运算符 | 左→右 |
13 | || | 逻辑或运算符 | 左→右 |
14 | ? : | 条件运算符(三目) | 右→左 |
15 | +、+=、-=、*=、/=、%=、>>=、<<=、&=、^=、!= | 赋值运算符 | 右→左 |
16 | throw | 抛出异常运算符 | 右→左 |
17 | , | 逗号运算符 | 左→右 |
说明:
- 同一优先级的运算符,运算次序由结合方向决定。
比如:-++i 相当于 -(++i)。 - 不同运算符要求有不同的运算对象个数。条件运算符(? :)是C++中唯一的一个三目运算符。
- 大致归纳各类运算符的优先级:
初等运算符() [] -> .
↓
单目运算符
↓
算数运算符(先乘除,后加减)
↓
(左移、右移运算符)
↓
关系运算符
↓
(位运算符)
↓
逻辑运算符(不包括!)
↓
条件运算符
↓
赋值运算符
↓
逗号运算符
以上的优先级别由上到下递减。初等运算符优先级最高,逗号运算符优先级最低。
(以上资料来自C++程序设计第3版附录B)