C++ 学习笔记 运算符优先级
原则:
单目运算符》双目算符》三目运算符;
算数运算符》关系运算符》逻辑运算
移位运算符》关系运算符》位逻辑运算符
括号最高,逗号最低,赋值和复合赋值仅高于逗号运算符
右结合性:先计算右边再计算左边:三目和赋值运算符
左侧结合性:先计算左边再计算右边:其余运算符
一,赋值运算符
用于修改对象的值。
| 运算符名 | 语法 | 可重载 |
|---|---|---|
| 加法赋值 | 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 起)

浙公网安备 33010602011771号