- 注:以下所有内容全部翻译至C++ Primer Plus Sixth Edition
- 说明:C++运算符分为18个优先级组,第一组优先级最高,第二组次之,以此类推。如果两个运算符被用于操作同一个操作数,并且两个运算符优先级相同,则根据C++使用的结合性来决定哪个运算符结合的更为紧密。
- 说明:同组内,优先级一样,排名不分先后
优先级组 | 运算符 | 结合性 | 含义 | 例子 |
第1组 | :: | 作用域解析运算符 | Class::function(); | |
第2组 | ( 表达式 ) | 分组 | (3 + 6.5 * x); | |
() | 从左到右 | 函数调用 | function(x, y); | |
() | 值构造,即type(expr) | string("Hughen"); | ||
[ ] | 数组下标 | array[1] * 5; | ||
-> | 间接成员运算符 | ptr->num[1]; | ||
. | 直接成员运算符 | my.name; | ||
const_cast | 专用类型转换(去掉类型中的常量符const) | pb = const_cast<ptr*>(pa); | ||
dynamic_cast | 专用类型转换(完成类层次结构中的提升) | void* pb = dynamic_cast<Class*>(pa) | ||
reinterpret_cast | 专用类型转换(转换成其它类型的指针) | B* pb = reinterpret_cast<A*>(pa); | ||
static_cast | 专用类型转换 | int a = static_cast<double>(12.77); | ||
++ | 自增加1,后缀 | i++ * 4; | ||
-- | 自减减1,后缀 | i-- * 4; | ||
第3组 | ! | 从右到左 | 逻辑非 | !open(); |
~ | 位非 | &~12; | ||
+ | 一元加号(正号) | +a; | ||
- | 一元减号(负号) | -a + 7 / b; | ||
++ | 自增加1,前缀 | ++i * 4; | ||
-- | 自减减1,前缀 | --i * 4; | ||
& | 取地址 | ptr = &a; | ||
* | 解除引用(间接值) | i = *ptr; | ||
() | 类型转换,即(type)expr | (int)12.77; | ||
sizeof | 以字节为单位,求长度 | sizeof(int); | ||
new | 动态分配内存 | int* p = new int; | ||
new [ ] | 动态分配数组 | int* p = new int[5]; | ||
delete | 动态释放内存 | delete p; | ||
delete [ ] | 动态释放数组 | delete [ ] p; | ||
第4组 | .* | 从左到右 | 成员解除引用 | my.*ptr + 5; |
->* | 间接成员解除引用 | pa->*ptr + 5; | ||
第5组 | * | 从左到右 | 乘 | i * j + 9 |
/ | 除 | i / j + 9 | ||
% | 模(余数) | int a = 7 % 4 | ||
第6组 | + | 从左到右 | 加 | int x = 12 + a; |
- | 减 | int x = 12 - a; | ||
第7组 | << | 从左到右 | 左移 | int a = 5 << 2; |
>> | 右移 | int a = 5 >> 2; | ||
第8组 | < | 从左到右 | 小于 | bool sign = x < MAX; |
<= | 小于或等于 | bool sign = x <= MAX; | ||
>= | 大于或等于 | bool sign = x >= MAX; | ||
> | 大于 | bool sign = x > MAX; | ||
第9组 | == | 从左到右 | 等于 | bool sign = x == MAX; |
!= | 不等于 | bool sign = x != MAX; | ||
第10组 | & | 从左到右 | 按位与(按位AND) | int a = 5 & 2; |
第11组 | ^ | 从左到右 | 按位异或(按位XOF) | int a = 5 ^ 2; |
第12组 | | | 从左到右 | 按位或(按位OR) | int a = 5 | 2; |
第13组 | && | 从左到右 | 逻辑AND | bool sign = x && x != 0; |
第14组 | || | 从左到右 | 逻辑OR | bool sign = x || x != 0; |
第15组 | ? : | 从右到左 | 条件(三元条件运算符) | int i = (x < MAX) ? x : MAX; |
第16组 | = | 从右到左 | 简单赋值 | int i = 0; |
*= | 乘并赋值 | x *= 5; | ||
/= | 除并赋值 | x /= 5; | ||
%= | 求模并赋值 | x %= 5; | ||
+= | 加并赋值 | x += 5; | ||
-= | 减并赋值 | x -= 5; | ||
&= | 按位AND并赋值 | x &= 5; | ||
^= | 按位XOR并赋值 | x ^= 5; | ||
|= | 按位OR并赋值 | x |= 5; | ||
<<= | 左移并赋值 | x <<= 2; | ||
>>= | 右移并赋值 | x >>= 2; | ||
第17组 | throw | 从左到右 | 抛出异常 | throw 404; |
第18组 | , | 从左到右 | 将两个表达式合并成一个 | int x = 0, y = 5 * MAX; |