C++运算符优先级

C++语言操作符优先级

优先级

运算符

    

  例

结合方向

要求运算

对象的个数

可重载性

1

::

全局解析

::x

自右至左

一元操作符

不可重载

::

类域解析

X::x

自左至右

二元操作符

不可重载

2

.

直接成员选择运算符

s.len

自左至右

二元操作符

不可重载

( )

圆括号

 

 

可重载

( )

函数调用

rand( )

( )

类型构造

int( ch)

[ ]

下标运算符

a[i]

二元操作符

->

间接成员选择运算符

p->len

二元操作符

++

后增

n++

自右至左

一元操作符

- -

后减

n- -

一元操作符

3

!

逻辑非运算符

!p

自右至左

一元操作符

可重载

~

按位取反运算符

~s

++

前增运算符

++n

- -

前减运算符

- -n

-

负号运算符

-n

*

反引用运算符

*p

&

求地址运算符

&x

new

空间分配

new int(9)

delete

空间释放

delete p

(类型)

类型转换运算符

(int)ch

二元操作符

sizeof

长度运算符

sizeof(a)

一元操作符

不可重载

4

*

乘法运算符

m*n

自左至右

二元操作符

可重载

/

除法运算符

m/n

%

求余运算符

m%n

5

+

加法运算符

m+n

自左至右

二元操作符

可重载

-

减法运算符

m-n

6

<< 

左移运算符

m<<n

自左至右

二元操作符

可重载

>> 

右移运算符

m>>n

7

小于

x<y

自左至右

二元操作符

可重载

<=

小于等于

x<=y

大于

x>y

>=

大于等于

x>=y

8

==

等于运算符

x==y

自左至右

二元操作符

可重载

!=

不等于运算符

x!=y

9

&

按位与运算符

s&t

自左至右

二元操作符

可重载

10

^

按位异或运算符

s^t

自左至右

二元操作符

可重载

11

|

按位或运算符

s|t

自左至右

二元操作符

可重载

12

&&

逻辑与运算符

u&&v

自左至右

二元操作符

可重载

13

||

逻辑或运算符

u||v

自左至右

二元操作符

可重载

14

:

条件运算符

u? x : y

自左至右

三元操作符

不可重载

15

=

赋值运算符

n=22

自右至左

二元操作符

可重载

+=

先加,再赋值

n+=8

-=

先减,再赋值

n-=4

*=

先乘,再赋值

n*= -1

/=

先除,再赋值

n/10

%=

先求余,再赋值

n%=10

>>=

先左移位,再赋值

n>>=1

<<=

先右移位,再赋值

N<<=1

&=

先按位与,再赋值

s&=mask

^=

先按位异或,再赋值

s^=mask

|=

先按位或,再赋值

s|=mask

16

,

逗号运算符

++m,- -n

自左至右

 

可重载

运算符优先级记忆方法:

 

 
   
  C++语言操作符优先级



                                              

 

 

说明:

C++输入输出是通过iostream库来实现的。在iostream库中,输入输出操作分别有istream(输入流)ostream(输出流)两个类提供,而iostream则是这两个类的派生类。它允许进行双向的I/O操作。istream的输入操作可以认为是一个数据抽取的过程,通过右移操作符“>>”从输入流抽取数据;而ostream的输出操作则可以认为是一个数据插入的过程,通过左移操作符“<<”将数据插入到输出流中。

用法:cin>>a;   可将“>>”称为析取操作符    可重载

   cout<<a;  可将“<<”称为插入操作符    可重载


附二

操作符及其结合性功能用法
L::global scope(全局作用域):: name
L::class scope(类作用域)class :: name
L::namespace scope(名字空间作用域)namespace :: name
L.member selectors(成员选择)object . member
L->member selectors(成员选择)pointer -> member
L[]subscript(下标)variable[expr]
L()function call(函数调用)name(expr_list)
L()type construction(类型构造)type(expr_list)
R++postfix increment(后自增操作) lvalue++
R--postfix decrement(后自减操作)lvalue--
Rtypeidtype ID(类型ID)typeid (type)
Rtypeidrun-time type ID(运行时类型 ID)typeid (expr)
Rexplicit cast
(显式强制类型转换)
type conversion(类型转换)cast_name<type>(expr)
Rsizeofsize of object(对象的大小)sizeof expr
Rsizeofsize of type(类型的大小)sizeof(type)
R++prefix increment(前自增操作)++lvalue
R--prefix decrement(前自减操作)--lvalue
R~bitwise NOT(位求反)~expr
R!logical NOT(逻辑非)!expr
R-unary minus(一元负号)=-expr
R+unary plus(一元正号)=+expr
R*dereference(解引用)*expr
R&address-of(取地址)&expr
R()type conversion(类型转换)(type) expr
Rnewallocate object(创建对象)new type
Rdeletedeallocate object(释放对象)delete expr
Rdelete[]deallocate array(释放数组)delete[] expr
L->*ptr to member select(指向成员操作的指针)ptr ->*ptr_to_member
L.*ptr to member select(指向成员操作的指针)obj .*ptr_to_member
L*multiply(乘法)expr * expr
L/divide(除法)expr/ expr
L%modulo (remainder)(求模(求余))expr % expr
L+add(加法)expr +expr
L-subtract(减法)expr - expr
L<<bitwise shift left(位左移)expr << expr
L>>bitwise shift right(位右移)expr >> expr
L<less than(小于)expr < expr
L<=less than or equal(小于或等于)expr <= expr
L>greater than(大于)expr > expr
L>=greater than or equal(大于或等于)expr >= expr
L==equality(相等)expr == expr
L!=inequality(不等)expr != expr
L&bitwise AND(位与)expr & expr
L^bitwise XOR()expr ^ expr
L|bitwise OR(位异或)expr | expr
L&&logical AND(逻辑与)expr && expr
L||logical OR(逻辑或)expr || expr
R?:conditional(条件操作)expr ? expr : expr
R=assignment(赋值操作)lvalue = expr
R*=, /=, %=,compound assign(复合赋值操作)lvalue += expr, etc.
R+=,-=,
R<<=, >>=,
R&=,|=, ^=
Rthrowthrow exception(抛出异常) throw expr
L,comma(逗号)expr, expr


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值