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++)... | 从左到右 |