原则:
单目运算符》双目算符》三目运算符;
算数运算符》关系运算符》逻辑运算
移位运算符》关系运算符》位逻辑运算符
括号最高,逗号最低,赋值和复合赋值仅高于逗号运算符
右结合性:先计算右边再计算左边:三目和赋值运算符
左侧结合性:先计算左边再计算右边:其余运算符
一,赋值运算符
用于修改对象的值。
运算符名 | 语法 | 可重载 |
---|---|---|
加法赋值 | a += b |
是 |
简单赋值 | a = b |
是 |
减法赋值 | a -= b |
是 |
乘法赋值 | a *= b |
是 |
除法赋值 | a /= b |
是 |
取模赋值 | a %= b |
是 |
逐位与赋值 | a &= b |
是 |
逐位或赋值 | a |= b |
是 |
逐位异或赋值 | a ^= b |
是 |
逐位左移赋值 | a <<= b |
是 |
逐位右移赋值 | a >>= b |
是 |
二.自增/自减运算符
自增/自减运算符增加或减小对象的值
运算符名 | 语法 | 可重载 |
---|---|---|
前自减 | --a |
是 |
后自增 | a++ |
是 |
前自增 | ++a |
是 |
后自减 | a-- |
是 |
三.算术运算符
返回特定算术运算的结果
运算符名 | 语法 | 可重载 |
---|---|---|
一元减 | -a |
是 |
一元加 | +a |
是 |
加法 | a + b |
是 |
减法 | a - b |
是 |
乘法 | a * b |
是 |
除法 | a / b |
是 |
模 | a % b |
是 |
逐位非 | ~a |
是 |
逐位与 | a & b |
是 |
逐位或 | a | b |
是 |
逐位异或 | a ^ b |
是 |
逐位左移 | a << b |
是 |
逐位右移 | a >> b |
是 |
四.逻辑运算符
返回布尔运算的结构(关键词形式(and、or、not)和符号形式(&&、||、!)的使用可以互相代替)
运算符名 | 语法 | 可重载 |
---|---|---|
与 | a and b
|
是 |
非 | not a
|
是 |
同或 | a or b
|
是 |
五.比较运算符
比较参数
运算符名 | 语法 | 可重载 |
---|---|---|
不等于 | a != b |
是 |
等于 | a == b |
是 |
小于 | a < b |
是 |
大于 | a > b |
是 |
小于或等于 | a <= b |
是 |
大于或等于 | a >= b |
是 |
三路比较(C++20) | a <=> b |
是 |
六.成员访问运算符
运算符名 | 语法 | 可重载 |
---|---|---|
间接寻址(由 a 所指向的变量) |
*a |
是 |
数组下标 | a[b] |
是 |
取地址 | &a |
是 |
对象的成员 | a.b |
否 |
指针的成员 | a->b |
是 |
对象的成员指针 | a.*b |
否 |
指针的成员指针 | a->*b |
是 |
七.其他运算符
运算符名 | 语法 | 可重载 |
---|---|---|
逗号 | a, b |
是 |
函数调用 | a(a1, a2) |
是 |
条件 | a ? b : c |
否 |
八.运算符优先级
优先级 |
运算符 |
描述 |
结合性 |
1 |
:: |
作用域解析 |
从左到右 |
2 |
a++ a-- |
||
type() type{} |
函数风格转型 | ||
a() |
函数调用 | ||
a[] |
下标 | ||
. -> |
成员访问 | ||
3 |
++a --a |
从右到左 |
|
+a -a |
|||
! ~ |
逻辑非和逐位非 |
||
(type) |
c风格转型 |
||
*a |
间接(解引用) |
||
&a |
取止 |
||
sizeof |
取大小 | ||
co_await |
await 表达式 (C++20) |
||
new new[] |
动态内存分配 | ||
delete delete[] |
动态内存分配 | ||
4 |
.* ->* |
成员指针 |
从左到右 |
5 |
a*b a/b a%b |
乘法,除法,取余 | |
6 |
a+b a-b |
加法,减法 | |
7 |
<< >> |
||
8 |
<=> |
三路比较运算(C++20 起) |
|
9 |
< <= |
||
> >= |
|||
10 |
== != |
||
11 |
a&b |
逐位与 | |
12 |
^ |
逐位异域(互斥或) |
|
13 |
| |
逐位或(可兼或) |
|
14 |
&& |
逻辑与 | |
15 |
|| |
逻辑或 | |
16 |
a?b:c |
三元条件 |
从右到左 |
throw |
throw运算 | ||
co_yield |
yield 表达式 (C++20) |
||
= |
直接赋值(C++ 类默认提供) |
||
+= -= |
|||
*= /= %= |
以积、商及余数复合赋值 |
||
<<= >>= |
以逐位左移及右移复合赋值 |
||
&= ^= |= |
以逐位与、异或及或复合赋值 |
||
17 |
, |
逗号 |
从左到右 |
特殊运算符
static_cast 转换一个类型为另一相关类型
dynamic_cast 在继承层级中转换
const_cast 添加或移除 cv 限定符
reinterpret_cast 转换类型到无关类型
C 风格转型 以 static_cast 、 const_cast 及 reinterpret_cast 的混合转换一个类型到另一类型
new 创建有动态存储期的对象
delete 销毁先前由 new 表达式创建的对象,并释放其所拥有的内存区域
sizeof 查询类型的大小
sizeof... 查询形参包的大小(C++11 起)
typeid 查询类型的类型信息
noexcept 查询表达式是否能抛出异常(C++11 起)
alignof 查询类型的对齐要求(C++11 起)