25-C++-运算符优先级

补充内容:运算符优先级

运算符优先级决定了运算符对于值的顺序。C++运算符分为18个优先级组,如下表所示。第一组的运算符的优先级就高,第二组中运算符的优先级次之,以此类推。如果两个运算符被用于同一个操作数,则首先应用优先级高得运算符。如果两个运算符的优先级相同,则C++使用结合性规则来决定哪个运算符结合得更为紧密。同一组中运算符的优先级和结合性相同。不管是从左到右还是从右到左结合,从左到右的结合性意味着首先应用最左边的运算符,而从右到左的结合性意味着首先应用最右边的运算符。

C++运算符的优先级和结合性

运算符

结合性

含义

优先级第1

::

 

作用域解析运算符

优先级第2

()

从左到右

函数调用

()

从左到右

值构造,即type(expr)

[ ]

从左到右

数字下标

->

从左到右

间接成员运算符

.

从左到右

直接成员运算符

const_cast

从左到右

专用的类型转换

dynamic_cast

从左到右

专用的类型转换

reinterpret_cast

从左到右

专用的类型转换

static_cast

从左到右

专用的类型转换

typeid

从左到右

类型标识

++

从左到右

1运算符,后缀

--

从左到右

1运算符,后缀

优先级第3组(全是一元运算符)

从右到左

逻辑非

~

从右到左

位非

+

从右到左

一元加号(正号)

-

从右到左

一元减号(负号)

++

从右到左

1运算符,前缀

--

从右到左

1运算符,前缀

&

从右到左

地址

*

从右到左

解除引用(间接值)

()

从右到左

类型转换,即(typeexpr

sizeof

从右到左

长度,以字节为单位

new

从右到左

动态分配内存

new[]

从右到左

动态分配数组

delete

从右到左

动态释放内存

delete[]

从右到左

动态释放数组

优先级第4

.*

从左到右

成员解除引用

->*

从左到右

间接成员解除引用

优先级第5组(全是二元运算符)

*

从左到右

/

从左到右

^

从左到右

模(余数)

优先级第6组(全是二元运算符)

+

从左到右

-

从左到右

优先级第7

<<

从左到右

左移

>>

从左到右

右移

优先级第8

<

从左到右

小于

<=

从左到右

小于或等于

>=

从左到右

大于或等于

>

从左到右

大于

优先级第9

==

从左到右

等于

!=

从左到右

不等于

优先级第10组(一元运算符)

&

从左到右

按位AND

优先级第11

^

从左到右

按位XOF(异或)

优先级第12

|

从左到右

按位OR

优先级第13

&&

从左到右

逻辑AND

优先级第14

||

从左到右

逻辑OR

优先级第15

:?

从右到左

条件

优先级第16

=

从右到左

简单赋值

*=

从右到左

乘并赋值

/=

从右到左

除并赋值

%=

从右到左

求模并赋值

+=

从右到左

加并赋值

-=

从右到左

减并赋值

&=

从右到左

按位AND并赋值

^=

从右到左

按位XOR并赋值

!=

从右到左

按位OR并赋值

<<=

从右到左

左移并赋值

>>=

从右到左

右移并赋值

优先级第17

throw

从左到右

引发异常

优先级第18

,

从左到右

将两个表达式合并成一个

猜你喜欢

转载自blog.csdn.net/qq_41200424/article/details/80439797