C++运算符优先级

来源:互联网 发布:spring apache shiro 编辑:程序博客网 时间:2024/05/16 02:05

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(全局作用域):: nameL::class scope(类作用域)class :: nameL::namespace scope(名字空间作用域)namespace :: nameL.member selectors(成员选择)object . memberL->member selectors(成员选择)pointer -> memberL[]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 exprRsizeofsize of type(类型的大小)sizeof(type)R++prefix increment(前自增操作)++lvalueR--prefix decrement(前自减操作)--lvalueR~bitwise NOT(位求反)~exprR!logical NOT(逻辑非)!exprR-unary minus(一元负号)=-exprR+unary plus(一元正号)=+exprR*dereference(解引用)*exprR&address-of(取地址)&exprR()type conversion(类型转换)(type) exprRnewallocate object(创建对象)new typeRdeletedeallocate object(释放对象)delete exprRdelete[]deallocate array(释放数组)delete[] exprL->*ptr to member select(指向成员操作的指针)ptr ->*ptr_to_memberL.*ptr to member select(指向成员操作的指针)obj .*ptr_to_memberL*multiply(乘法)expr * exprL/divide(除法)expr/ exprL%modulo (remainder)(求模(求余))expr % exprL+add(加法)expr +exprL-subtract(减法)expr - exprL<<bitwise shift left(位左移)expr << exprL>>bitwise shift right(位右移)expr >> exprL<less than(小于)expr < exprL<=less than or equal(小于或等于)expr <= exprL>greater than(大于)expr > exprL>=greater than or equal(大于或等于)expr >= exprL==equality(相等)expr == exprL!=inequality(不等)expr != exprL&bitwise AND(位与)expr & exprL^bitwise XOR()expr ^ exprL|bitwise OR(位异或)expr | exprL&&logical AND(逻辑与)expr && exprL||logical OR(逻辑或)expr || exprR?:conditional(条件操作)expr ? expr : exprR=assignment(赋值操作)lvalue = exprR*=, /=, %=,compound assign(复合赋值操作)lvalue += expr, etc.R+=,-=,R<<=, >>=,R&=,|=, ^=Rthrowthrow exception(抛出异常) throw exprL,comma(逗号)expr, expr


0 0
原创粉丝点击