下表列出了C++运算符的优先级和结合性。从上到下,运算符的优先级下降.
优先级 | 操作符 | 描述 | 结合性 |
---|---|---|---|
1 | :: | 作用域解析 | 从左到右 |
2 | ++ -- | 后缀 自增、自减 | |
() | 函数调用 | ||
[] | 数组下标 | ||
. | 通过引用选择成员 | ||
−> | 通过指针选择成员 | ||
3 | ++ -- | 前缀 自增、自减 | 从右到左 |
+ − | 正、负 | ||
! ~ | 逻辑非、按位非 | ||
(type) | 显式类型转换 | ||
* | 解引用 | ||
& | 取地址 | ||
sizeof | 取对象大小 | ||
new , new[] | 动态内存分配 | ||
delete , delete[] | 动态内存去分配 | ||
4 | .* ->* | 成员指针运算符 | 从左到右 |
5 | * / % | 乘、除、求余 | |
6 | + − | 加、减 | |
7 | << >> | 按位左移、按位右移 | |
8 | < <= | 小于、小于或等于 | |
> >= | 大于、大于或等于 | ||
9 | == != | 等于、不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 逻辑与 | |
14 | || | 逻辑或 | |
15 | ?: | 三目运算符 | 从右到左 |
= | 赋值 | ||
+= −= | 加法/减法赋值运算符 | ||
*= /= %= | 乘法/除法/取余赋值运算符 | ||
<<= >>= | 按位左移/右移赋值运算符 | ||
&= ^= |= | 按位与/异或/或赋值运算符 | ||
throw | 抛出异常 | ||
17 | , | 逗号 | 从左到右 |
解析表达式时,操作员是列出的一些行会的约束更严格的(如果用括号),其参数比任何操作上列出它下面的一排。例如,表达式
std::cout<<a&b和
*p++被解析为
(std::cout<<a)&b
*(p++),而不是作为
std::cout<<(a&b)或
(*p)++.
运算符的优先级不受重载的影响。
注释
另请参阅
求值的顺序运行时运算符参数
普通运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 自增 自减 | 算术 | 逻辑 | 比较 | 成员访问 | 其他 |
a = b | ++a | +a | !a | a == b | a[b] | a(...) |
特殊运算符 | ||||||
static_cast 将一个类型转换为另一个相关类型 |