运算符优先级详解

来源:互联网 发布:c语言转汇编 编辑:程序博客网 时间:2024/05/16 09:12

下表列出了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 起)

原创粉丝点击