运算符优先级和结合性
C++ 语言包括任何 C 运算符并添加若干新运算符。 运算符指定要执行的计算下列操作之一:
一个操作数 (一元运算符)
两个操作数 (二元运算符)
三个操作数 (三元) 运算符
运算符遵循严格的优先级,定义包含这些运算符的表达式计算顺序。 运算符与在其左侧的表达式或在其右侧的表达式;这称为 “结合性”。下表显示 C++ 运算符优先级和结合性 (由高至低的优先级)。 表的同一段落的运算符在表达式的发布的顺序相同优先级和计算,除非显式强制由括号。
C++ 运算符优先级和结合性
运算符 |
名称或含义 |
结合性 |
---|---|---|
:: |
范围解析 |
无 |
|
|
|
. |
成员选择 (对象) |
从左到右 |
–> |
成员选择 (属于指针) |
从左到右 |
[ ] |
数组下标 |
从左到右 |
( ) |
成员函数调用初始化 |
从左到右 |
++ |
后缀递增 |
从左到右 |
–– |
后缀递减 |
从左到右 |
typeid( ) |
类型名称 |
从左到右 |
const_cast |
类型转换 |
从左到右 |
dynamic_cast |
类型转换 |
从左到右 |
reinterpret_cast |
类型转换 |
从左到右 |
static_cast |
类型转换 |
从左到右 |
|
|
|
sizeof |
对象或类型的范围 |
从右到左 |
++ |
前缀递增 |
从右到左 |
–– |
前缀递减 |
从右到左 |
~ |
1 的补码 |
从右到左 |
! |
逻辑 " 非 " |
从右到左 |
– |
一元负 |
从右到左 |
+ |
一元加号 |
从右到左 |
& |
地址 |
从右到左 |
* |
间接寻址 |
从右到左 |
new |
创建对象 |
从右到左 |
delete |
销毁对象 |
从右到左 |
( ) |
Cast |
从右到左 |
|
|
|
.* |
指向成员的指针 (对象) |
从左到右 |
–>* |
指向成员的指针 (属于指针) |
从左到右 |
|
|
|
* |
乘法 |
从左到右 |
/ |
除法 |
从左到右 |
% |
模数 |
从左到右 |
|
|
|
+ |
添加 |
从左到右 |
– |
减法 |
从左到右 |
|
|
|
<< |
左移 |
从左到右 |
>> |
右移 |
从左到右 |
|
|
|
< |
小于 |
从左到右 |
> |
大于 |
从左到右 |
<= |
小于或等于 |
从左到右 |
>= |
大于或等于 |
从左到右 |
|
|
|
== |
相等 |
从左到右 |
!= |
不相等 |
从左到右 |
|
|
|
& |
按位“与” |
从左到右 |
|
|
|
^ |
按位“异或” |
从左到右 |
|
|
|
| |
按位“与或” |
从左到右 |
|
|
|
&& |
逻辑“与” |
从左到右 |
|
|
|
|| |
逻辑“或” |
从左到右 |
|
|
|
expr1 ? expr2 : expr3 |
条件运算 |
从右到左 |
|
|
|
= |
赋值 |
从右到左 |
*= |
乘法赋值 |
从右到左 |
/= |
除法赋值 |
从右到左 |
%= |
取模赋值 |
从右到左 |
+= |
加法赋值 |
从右到左 |
–= |
减法赋值 |
从右到左 |
<<= |
左移赋值 |
从右到左 |
>>= |
右移赋值 |
从右到左 |
&= |
按位、赋值 |
从右到左 |
|= |
包含按位或分配 |
从右到左 |
^= |
按位 " 异或 " 赋值 |
从右到左 |
|
|
|
throwexpr |
引发表达式 |
从右到左 |
|
|
|
, |
逗号 |
从左到右 |