【C++深陷】之“优先级表及左右值”

0. 什么是优先级

表达式中只有一个运算符的时候,例如a + b,不存在优先级,因为一定是计算加法。

表达式中含有2个或2个以上的运算符的时候,表达式被称为复合表达式(compound expression)

优先级(precedence) 指的是在计算复合表达式时,运算符按照规定的顺序计算。

例如a + b * c要先计算乘法b * c再计算加法。

本文将列出C++中所有的运算符及其优先级

1. 优先级表

下面的表格,按照优先级将运算符分组。

  1. 组的位置越靠前,优先级越高;
  2. 同一组内的优先级相同。

(参考《C++ Primer(第5版)》)

结合律运算符功能用例左值与右值
::全局作用域::name
::类作用域class::name
::命名空间作用域namespace::name
.成员访问object.member与运算对象相同
->成员访问pointer->member运算对象是一个指针类型,返回一个左值
[ ]下标expr[expr]
()函数调用name(expr_list)
()类型构造type(expr_list)
++后置递增运算符lvalue++运算对象是左值,对象原始值的副本作为右值返回
后置递减运算符lvalue–运算对象是左值,对象原始值的副本作为右值返回
typeid类型IDtypeid(type)
typeid运行时类型IDtypeid(expr)
explicit cast类型转换cast_name<type>(expr)
++前置递增运算++lvalue运算对象是左值,对象本身作为左值返回
前置递减运算符–lvalue运算对象是左值,对象本身作为左值返回
~位求反~expr
!逻辑非!expr运算对象和求值结果都是右值
-一元负号-expr运算对象和求值结果都是右值
+一元正号+expr运算对象和求值结果都是右值
*解引用*expr
&取地址&lvalue
()类型转换(type) expr
sizeof对象的大小sizeof expr
sizeof类型的大小sizeof(type)
sizeof…参数包的大小sizeof…(name)
new创建对象new type
new []创建数组new type[size]
delete释放对象delete expr
delete []释放数组delete [] expr
noexcept能否抛出异常noexcept(expr)
->*指向成员选择的指针ptr->*ptr_to_member
.*指向成员选择的指针obj.*ptr_to_member
*乘法expr * expr运算对象和求值结果都是右值
/除法expr / expr运算对象和求值结果都是右值
%取模(取余)expr % expr运算对象和求值结果都是右值
+加法expr + expr运算对象和求值结果都是右值
-减法expr - expr运算对象和求值结果都是右值
<<向左移位expr << expr
>>向右移位expr >> expr
<小于expr < expr运算对象和求值结果都是右值
<=小于等于expr <= expr运算对象和求值结果都是右值
>大于expr > expr运算对象和求值结果都是右值
>=大于等于expr >= expr运算对象和求值结果都是右值
==相等expr == expr运算对象和求值结果都是右值
!=不相等expr != expr运算对象和求值结果都是右值
&位与expr & expr
^位异或expr ^ expr
|位或expr | expr
&&逻辑与expr && expr运算对象和求值结果都是右值
||逻辑或expr || expr运算对象和求值结果都是右值
? :条件cond ? expr1 : expr2当expr1和expr2都是左值或者能转换成同一种左值类型时,结果是左值;否则结构是右值
=赋值lvalue = expr左侧运算对象是一个可修改的左值,结果是一个左值
*=, /=, %=复合赋值lvalue += expr等与赋值运算符一样
+=, -=
<<=, >>=
&=, |=, ^=
throw抛出异常throw expr
,逗号expr1, expr2如果expr2是左值,则结果是左值;否则右值
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值