【转载】C++操作符的优先级


C++操作符的优先级

操作符及其结合性

功能

用法

L
L
L
::
::
::
全局作用域 
类作用域 
名字空间作用域
::name
class::name
namespace::name
L
L
L
L
L
.
->
[]
()
()
成员选择 
成员选择 
下标 
函数调用 
类型构造 
object.member
pointer->member
variable[expr]
name(expr_list)
type(expr_list)
R
R
R
R
R
++
--
typeid
typeid
显示强制类型转换 
后自增操作 
后自减操作 
类型ID
运行时类型ID
类型转换 
lvalue++
lvalue--
typeid(type)
typeid(expr)
cast_name<type>(expr)
R
R
R
R
R
R
R
R
R
R
R
R
R
R
sizeof
sizeof
++
--
~
!
-
+
*
&
()
new
delete
delete[]
对象的大小 
类型的大小 
前自增操作 
前自减操作 
位求反 
逻辑非 
一元负号 
一元正号 
解引用 
取地址 
类型转换 
创建对象 
释放对象 
释放数组
sizeof expr
sizeof(type)
++lvalue
--lvalue
~expr
!expr
-expr
+expr
*expr
&expr
(type)expr
new type
delete expr
delete []expr
L
L
->*
.*
指向成员操作的指针 
指向成员操作的指针
ptr->*ptr_to_member
obj.*ptr_to_member
L
L
L
*
/
%
乘法 
除法 
求模(求余)
expr * expr
expr / expr
expr % expr
L
L
+
-
加法 
减法
expr + expr
expr - expr
L
L
<< 
>>
位左移 
位右移
expr << expr
expr >> expr
L
L
L
L
< 
<=
> 
>=
小于 
小于或等于 
大于 
大于或等于
expr < expr
expr <= expr
expr > expr
expr >= expr
L
R
==
!=
相等 
不等
Expr == expr
Expr != expr
R & 位与 Expr & expr
R ^ 位异或 Expr ^ expr
R | 位或 Expr | expr
R && 逻辑与 Expr && expr
R || 逻辑或 Expr || expr
R ?: 条件操作 Expr ? expr:expr
R
R
R
R
R
=
*=,/=,%=
+=,-=
<<=,>>=
&=,|=,^=
赋值操作 
复合赋值操作 

Lvalue= expr
Lvalue+= expr
…… 

R throw 抛出异常 Throw expr
L , 逗号 Expr, expr
记忆方法:
--摘自《C语言程序设计实用问答》      
    问题:如何记住运算符的15种优先级和结合性?   
    解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。   
    如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。   
    结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。   
    优先级有15种。记忆方法如下:   
    记住一个最高的:构造类型的元素或成员以及小括号。   
    记住一个最低的:逗号运算符。   
    剩余的是一、二、三、赋值。   
    意思是单目、双目、三目和赋值运算符。   
    在诸多运算符中,又分为:   
    算术、关系、逻辑。   
    两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:   
    算术运算符分     *,/,%高于+,-。   
    关系运算符中,〉,〉=,<,<=高于==,!=。   
    逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。   
    逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。   
    这样就将15种优先级都记住了,再将记忆方法总结如下:   
    去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。

posted @ 2009-11-16 17:05  leukotrichia  阅读(11411)  评论(0编辑  收藏  举报