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

a && b

not a

!a

 是
同或 a or b

a || 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 起)

原文地址:https://www.cnblogs.com/qq964107326/p/15024332.html