运算符优先级详解

下表列出了C++运算符的优先级和结合性。从上到下,运算符的优先级下降.

优先级 操作符 描述 结合性
1::作用域解析 从左到右
2 ++   -- 后缀 自增、自减
() 函数调用
[] 数组下标
. 通过引用选择成员
−> 通过指针选择成员
3 ++   -- 前缀 自增、自减 从右到左
+    正、负
!   ~ 逻辑非、按位非
(type) 显式类型转换
* 解引用
& 取地址
sizeof 取对象大小
newnew[] 动态内存分配
deletedelete[] 动态内存去分配
4.*   ->*成员指针运算符 从左到右
5*   /   %乘、除、求余
6+   加、减
7<<   >>按位左移、按位右移
8 <   <= 小于、小于或等于
>   >= 大于、大于或等于
9==   !=等于、不等于
10&按位与
11^按位异或
12|按位或
13&&逻辑与
14||逻辑或
15 ?: 三目运算符 从右到左
= 赋值
+=   −= 加法/减法赋值运算符
*=   /=   %= 乘法/除法/取余赋值运算符
<<=   >>= 按位左移/右移赋值运算符
&=   ^=   |= 按位与/异或/或赋值运算符
throw 抛出异常
17,逗号从左到右
解析表达式时,操作员是列出的一些行会的约束更严格的(如果用括号),其参数比任何操作上列出它下面的一排。例如,表达式 std::cout<<a&b*p++被解析为 (std::cout<<a)&b *(p++),而不是作为 std::cout<<(a&b)(*p)++.

 
在同一单元中列出的运算符,求值时在给定的方向上具有相同的优先级。例如,表达式 a=b=c被解析为 a=(b=c),而不是 (a=b)=c,因为从右到左的结合性.

运算符的优先级不受重载的影响。

注释

标准本身并没有指定优先级。它们从语法派生。

 
const_caststatic_castdynamic_castreinterpret_casttypeid不包括在内,因为它们永远不会有歧义.....

 
一些运算符有 替代拼写方式(例如, and &&or ||not !等).

另请参阅

求值的顺序运行时运算符参数

普通运算符
赋值自增
自减
算术逻辑比较成员访问其他

= b
+= b
-= b
*= b
/= b
%= b
&= b
|= b
^= b
<<= b
>>= b

++a
--a
a++
a--

+a
-a
+ b
- b
* b
/ b
% b
~a
& b
| b
^ b
<< b
>> b

!a
&& b
|| b

== b
!= b
< b
> b
<= b
>= b

a[b]
*a
&a
a->b
a.b
a->*b
a.*b

a(...)
a, b
? :

特殊运算符

static_cast 将一个类型转换为另一个相关类型 
dynamic_cast 在继承层次中进行转换 
const_cast 添加或移除 cv 限定符
reinterpret_cast 将类型转换为无关的类型 
C 风格的强制转换通过混合 static_castconst_cast 和 reinterpret_cast 将一个类型转换为另一个类型 
new 分配内存
delete 回收内存
sizeof 查询类型的大小
sizeof... 查询形参包的大小(C++11 起)
typeid 查询类型的类型信息
noexcept 检查表达式是否会抛出异常(C++11 起)
alignof 查询类型的对齐要求(C++11 起)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值