您的位置:首页 > 编程语言 > C语言/C++

C++中的操作符属性

2016-03-18 12:34 232 查看
C++中的操作符属性列表如下:

优先级
名称
符号
左值/右值
结合性
说明
1
全局作用域
::


C++
类作用域
::


C++
命名空间
::


C++
2
括号
()
同表达式

C/C++
函数调用
()


C/C++
下标
[]


C/C++
成员访问
.


C语言中代表结构体,c++中是类
指针成员访问
->


C语言中代表结构体,c++中是类
3
后自增
++

返回的是右值
后自减
--

返回的是右值
类型ID
typeid


运行时类型ID
typeid


显示强制类型转换
Dynamic_cast
static_cast
Reinterpret_cast
Const_cast


运行时识别指针或引用
普通类型转换
强制不能转换的类型进行转换
转换掉const属性
4
求类型大小
sizeof


以一个字节为单位,判断表达式时不需要对表达式求值,例如:sizeof(a=b+1),sizeof不能用于函数类型,不完全类型或者位字段或者void类型
前自增
++
不定

C中是右值,c++中是左值
前自减
--
不定

C中是右值,c++中是左值
位取反
~



逻辑非



一元正/负
+/-


解引用
*


取地址
&


类型转换
()


类型等级排名(无符号>有符号)
创建对象
new


如果new操作符申请空间不足,会抛出bad_alloc的异常
释放对象
delete


必须释放是由new申请的内存空间,但是释放值为0的指针是安全的,一旦delete一个指针,该指针便为悬垂指针,应立即设置为0
5

指向成员操作的指针
->*

.*

6

乘/除/求余
*/ / /%


计算时注意越界,要用类型转换
7

加/减
+/-


8

左/右移位
<</>>


对于无符号数的算术右移是不可移植的,右操作数不能是负数,而且必须严格小于左操作数的位数
9

关系操作符
>/>=/</<=


C语言产生整型,c++产生bool型,不能串接
10

相等/不等
=/!=


C语言产生整型,c++产生bool型
11

位与
&


12

位异或
^


13

位或
|


14

逻辑与
&&


短路求值
15

逻辑或
||


短路求值
16

条件表达式
?:


短路求值,两个表达式只求一个,可以直接在输出表达式中使用
17

各种赋值
……


复合赋值操作符先将右侧的完整求值再与左边运算,赋值操作符的左操作数必须是非const的左值
18

抛出异常
throw


19

逗号



逗号表达式不能为空,优先级最低的,如果赋值的话,必须用括号括起来,逗号操作符的结果是其最右边的表达式,其属性也与最右边的属性一致
<分析>:

(1)左值意味着一个位置,右值意味着一个值

(2)优先级、结合性只决定相邻两个操作符的执行顺序,同一个操作符的左右操作数的执行顺序无法确定

(3)对于同一个双目操作符,我们没办法知道是先计算左边的表达式,还是先 计算右边的 表达式,不可移植。尤其是自增、自减这类操作符出现就会存在副作用。但是&&,||,条件表达式,逗号表达式都规定了求值顺序

(4)各个不同的类型的值不能进行相互计算,必须先转换成相同类型的值。

(5)对于自增和自减操作符,最后使用前置操作符,因为前置操作符需要做的工作更少,加1后自动返回,而后置操作符先需要保存原来的值,以便返回未加1之前的值。

(6)因为同一个操作符的左右操作数计算先后顺序未定,所以尽量不要在同一个语句中多次使用同一个操作数,可以分成几条独立的语句使用,尤其是自增自减操作符,不要在一个表达式中多次对同一个对象作自增自减操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: