C++运算符执行顺序对照表:在线查看C++运算符执行优先级别
窍门: Ctrl+F 快速查找
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
1 | :: | 范围解析 | 自左向右 |
2 | ++ -- | 后缀自增/后缀自减 | |
() | 括号 | ||
[] | 数组下标 | ||
. | 成员选择(对象) | ||
−> | 成员选择(指针) | ||
3 | ++ -- | 前缀自增/前缀自减 | 自右向左 |
+ − | 加/减 | ||
! ~ | 逻辑非/按位取反 | ||
(type) | 强制类型转换 | ||
* | 取指针指向的值 | ||
& | 某某的地址 | ||
sizeof | 某某的大小 | ||
new,new[] | 动态内存分配/动态数组内存分配 | ||
delete,delete[] | 动态内存释放/动态数组内存释放 | ||
4 | .* ->* | 成员对象选择/成员指针选择 | 自左向右 |
5 | * / % | 乘法/除法/取余 | |
6 | + − | 加号/减号 | |
7 | << >> | 位左移/位右移 | |
8 | < <= | 小于/小于等于 | |
> >= | 大于/大于等于 | ||
9 | == != | 等于/不等于 | |
10 | & | 按位与 | |
11 | ^ | 按位异或 | |
12 | | | 按位或 | |
13 | && | 与运算 | |
14 | || | 或运算 | |
15 | ?: | 三目运算符 | 自右向左 |
16 | = | 赋值 | |
+= −= | 相加后赋值/相减后赋值 | ||
*= /= %= | 相乘后赋值/相除后赋值/取余后赋值 | ||
<<= >>= | 位左移赋值/位右移赋值 | ||
&= ^= |= | 位与运算后赋值/位异或运算后赋值/位或运算后赋值 | ||
17 | throw | 抛出异常 | |
18 | , | 逗号 | 自左向右 |
优先级 | 运算符 | 描述 | 例子 | 结合性 |
---|---|---|---|---|
1 |
() [] -> . :: ++ -- |
调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符 通过对象本身访问成员的操作符 作用域操作符 后置自增操作符 后置自减操作符 |
(a+b)/4; array[4]=2; ptr->age=34; obj.age=34; Class::age=2; for(i=0;i<10;i++)... for(i=10;i>0;i--)... |
从左到右 |
2 |
! ~ ++ -- - + * & (type) sizeof |
逻辑取反操作符 按位取反(按位取补) 前置自增操作符 前置自减操作符 一元取负操作符 一元取正操作符 解引用操作符 取地址操作符 类型转换操作符 返回对象占用的字节数操作符 |
if(!done)... flags=~flags; for(i=0;i<10;++i)... for(i=10;i>0;--i)... int i=-1; int i=+1; data=*ptr; address=&obj; int i=(int)floatNum; int size=sizeof(floatNum); |
从右到左 |
3 |
->* .* |
在指针上通过指向成员的指针访问成员的操作符 在对象上通过指向成员的指针访问成员的操作符 |
ptr->*var=24; obj.*var=24; |
从左到右 |
4 |
* / % |
乘法操作符 除法操作符 取余数操作符 |
int i=2*4; float f=10/3; int rem=4%3; |
从左到右 |
5 |
+ - |
加法操作符 减法操作符 |
int i=2+3; int i=5-1; |
从左到右 |
6 |
<< >> |
按位左移操作符 按位右移操作符 |
int flags=33<<1; int flags=33>>1; |
从左到右 |
7 |
< <= > >= |
小于比较操作符 小于或等于比较操作符 大于比较操作符 大于或等于比较操作符 |
if(i<42)... if(i<=42)... if(i>42)... if(i>=42)... |
从左到右 |
8 |
== != |
等于比较操作符 不等于比较操作符 |
if(i==42)... if(i!=42)... |
从左到右 |
9 | & | 按位与操作符 | flags=flags&42; | 从左到右 |
10 | ^ | 按位异或操作符 | flags=flags^42; | 从左到右 |
11 | | | 按位或操作符 | flags=flags|42; | 从左到右 |
12 | && | 逻辑与操作符 | if(conditionA&&conditionB)... | 从左到右 |
13 | || | 逻辑或操作符 | if(conditionA||conditionB)... | 从左到右 |
14 | ?: | 三元条件操作符 | int i=(a>b)?a:b; | 从右到左 |
15 |
= += -= *= /= %= &= ^= |= <<= >>= |
赋值操作符 复合赋值操作符(加法) 复合赋值操作符(减法) 复合赋值操作符(乘法) 复合赋值操作符(除法) 复合赋值操作符(取余) 复合赋值操作符(按位与) 复合赋值操作符(按位异或) 复合赋值操作符(按位或) 复合赋值操作符(按位左移) 复合赋值操作符(按位右移) |
int a=b; a+=3; b-=4; a*=5; a/=2; a%=3; flags&=new_flags; flags^=new_flags; flags|=new_flags; flags<<=2; flags>>=2; |
从右到左 |
16 | , | 逗号操作符 | for(i=0,j=0;i<10;i++,j++)... | 从左到右 |