C++操作符的优先级 | |||
操作符及其结合性 |
功能 |
用法 | |
L |
:: |
全局作用域 |
::name |
L |
. |
成员选择 |
object.member |
R |
++ |
后自增操作 |
lvalue++ |
R |
sizeof |
对象的大小 |
sizeof expr |
L |
->* |
指向成员操作的指针 |
ptr->*ptr_to_member |
L |
* |
乘法 |
expr * expr |
L |
+ |
加法 |
expr + expr |
L |
<< |
位左移 |
expr << expr |
L |
< |
小于 |
expr < expr |
L |
== |
相等 |
Expr == expr |
R |
& |
位与 |
Expr & expr |
R |
^ |
位异或 |
Expr ^ expr |
R |
| |
位或 |
Expr | expr |
R |
&& |
逻辑与 |
Expr && expr |
R |
|| |
逻辑或 |
Expr || expr |
R |
?: |
条件操作 |
Expr ? expr : expr |
R |
= |
赋值操作 |
Lvalue= expr |
R |
throw |
抛出异常 |
Throw expr |
L |
, |
逗号 |
Expr, expr |
记忆方法:
--摘自《C语言程序设计实用问答》 -吕凤翥 吕 涛著
问题:如何记住运算符的15种优先级和结合性?
解答:C语言中运算符种类比较繁多,优先级有15种,结合性有两种。
如何记忆两种结合性和15种优先级?下面讲述一种记忆方法。
结合性有两种,一种是自左至右,另一种是自右至左,大部分运算符的结合性是自左至右,只有单目运算符、三目运算符的赋值运算符的结合性自右至左。
优先级有15种。记忆方法如下:
记住一个最高的:构造类型的元素或成员以及小括号。
记住一个最低的:逗号运算符。
剩余的是一、二、三、赋值。
意思是单目、双目、三目和赋值运算符。
在诸多运算符中,又分为:
算术、关系、逻辑。
两种位操作运算符中,移位运算符在算术运算符后边,逻辑位运算符在逻辑运算符的前面。再细分如下:
算术运算符分 *,/,%高于+,-。
关系运算符中,》,》=,《,〈=高于==,!=。
逻辑运算符中,除了逻辑求反(!)是单目外,逻辑与(&&)高于逻辑或(||)。
逻辑位运算符中,除了逻辑按位求反(~)外,按位与(&)高于按位半加(^),高于按位或(|)。
这样就将15种优先级都记住了,再将记忆方法总结如下:
去掉一个最高的,去掉一个最低的,剩下的是一、二、三、赋值。双目运算符中,顺序为算术、关系和逻辑,移位和逻辑位插入其中。