C++操作符的优先级
操作符及其结合性
功能
用法
LLL::::::全局作用域 类作用域 名字空间作用域::nameclass::namenamespace::nameLLLLL.->[]()()成员选择 成员选择 下标 函数调用 类型构造 object.memberpointer->membervariable[expr]name(expr_list)type(expr_list)RRRRR++--typeidtypeid显示强制类型转换 后自增操作 后自减操作 类型ID运行时类型ID类型转换 lvalue++lvalue--typeid(type)typeid(expr)cast_name<type>(expr)RRRRRRRRRRRRRRsizeofsizeof++--~!-+*&()newdeletedelete[]对象的大小 类型的大小 前自增操作 前自减操作 位求反 逻辑非 一元负号 一元正号 解引用 取地址 类型转换 创建对象 释放对象 释放数组sizeof exprsizeof(type)++lvalue--lvalue~expr!expr-expr+expr*expr&expr(type)exprnew typedelete exprdelete []exprLL->*.*指向成员操作的指针 指向成员操作的指针ptr->*ptr_to_memberobj.*ptr_to_memberLLL*/%乘法 除法 求模(求余)expr * exprexpr / exprexpr % exprLL+-加法 减法expr + exprexpr - exprLL<< >>位左移 位右移expr << exprexpr >> exprLLLL< <=> >=小于 小于或等于 大于 大于或等于expr < exprexpr <= exprexpr > exprexpr >= exprLR==!=相等 不等Expr == exprExpr != exprR&位与Expr & exprR^位异或Expr ^ exprR|位或Expr | exprR&&逻辑与Expr && exprR||逻辑或Expr || exprR?:条件操作Expr ? expr : exprRRRRR=*=,/=,%=+=,-=<<=,>>=&=,|=,^=赋值操作 符合赋值操作 Lvalue= exprLvalue+= expr…… Rthrow抛出异常Throw exprL,逗号Expr, expr 记忆方法:--摘自《C语言程序设计实用问答》 -吕凤翥 吕 涛著 问题:如何记住运算符的15种优先级和结合性? 解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。 如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。 结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。 优先级有15种。记忆方法如下: 记住一个最高的:构造类型的元素或成员以及小括号。 记住一个最低的:逗号运算符。 剩余的是一、二、三、赋值。 意思是单目、双目、三目和赋值运算符。 在诸多运算符中,又分为: 算术、关系、逻辑。 两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下: 算术运算符分 *,/,%高于+,-。 关系运算符中,》,》=,《,〈=高于==,!=。 逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。 逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。 这样就将15种优先级都记住了,再将记忆方法总结如下: 去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、移位、关系、逻辑位、逻辑插入其中。