c++运算符与结合性

来源:互联网 发布:公司如何开淘宝店 编辑:程序博客网 时间:2024/05/16 08:04

C++运算符与结合性

优先级

运算符

含义

结合方向

1

::

域运算符

自左到右

2

()

括号,函数调用

自左到右

 

[]

数组下标运算符

 

 

->

指向成员运算符

 

 

.

成员运算符

 

 

++

自增运算符(后置)

 

 

--

自减运算符(后置)

 

3

++

自增运算符(前置)

自右到左

 

--

自减运算符(前置)

 

 

~

按位取反运算符

 

 

逻辑非运算

 

 

-

负号预算符

 

 

*

指针运算符

 

 

&

取地址运算符

 

 

(类型)

类型转换运算符

 

 

sizeof

长度运算符

 

 

new

动态分配空间运算符

 

 

delete

释放空间运算符

 

4

*、/、%

乘法、除法、求余

自左到右

 

 

 

 

5

+、-

加法、减法运算法

自左到右

6

<< 

按位左移运算符

自左到右

 

>> 

按位you移运算符

自左到右

7

<=、>=

关系运算符

自左到右

8

==、!=

等于运算符、不等于运算符

自左到右

9

&

按位与运算符

自左到右

10

^

按位异或运算符

自左到右

11

|

按位或运算符

自左到右

12

&&

逻辑与运算符

自左到右

13

||

逻辑或运算符

自左到右

14

?:

条件运算符(c++中唯一的三目运算符)

自右到左

15

=、+=、-=、/=、%=、>>=、<<=、&=、^=、!=

赋值运算符

自右到左

16

throw

抛出异常运算符

自右到左

17

逗号运算符

自左到右

从上述表中可以大致归纳出各类运算的优先级:

 

C++中的自增自减运算符:

只能用于变量,不能用于表达式和常量

同时可能由于编译器的结合性的不同,可能导致结果的差异

比如:int a=1;cout<<a++<<””<<a++<endl;

由于在vc和gcc中在处理输入流时,先按照自右到左的顺序对各输出项求值,因此先处理右边的a++,变成a=2,再处理左边的a++,故输出2 1.

比如:int i=3; (i++)+(i++)+(i++);

在vs2010中输出的结果是9,其过程就是在整个表达式中都认为i=3;,最后i=6;Ansi C++标准对表达式求值的顺序,并无统一规定,在求解一般表达式时不会发生歧义,而在求解含有++和—运算符时会出现歧义,在不同的系统中可能得到不同的结果