C++中运算符总结

为了便于以后常看相关运算符,故总结C++中,常用运算符如下:

优先级

运算符

名称与含义

使用形式

结合方向

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

(表达式)/函数名(形参表)

.

成员选择(对象)

对象.成员名

->

成员选择(指针)

对象指针->成员名

2(单目)

-

负号运算符

-表达式

右到左

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

size of

长度运算符

sizeof(表达式)

3(双目)

/

表达式/表达式

左到右

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4(双目)

+

表达式+表达式

左到右

-

表达式-表达式

5(双目)

<< 

左移

变量<<表达式

左到右

>> 

右移

变量>>表达式

6(双目)

大于

表达式>表达式

左到右

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7(双目)

==

等于

表达式==表达式

左到右

!=

不等于

表达式!=表达式

8(双目)

&

按位与

表达式&表达式

左到右

^

按位异或

表达式^表达式

|

按位或

表达式|表达式

&&

逻辑与

表达式&&表达式

||

逻辑或

表达式||表达式

9(三目)

?:

条件运算符

表达式1?表达式2:表达式3

右到左

10

=

赋值运算符

变量=表达式

右到左

/=

除后赋值

标量/=表达式

*=

乘后赋值

变量*=表达式

%=

取模后赋值

变量%=表达式

+=

加后赋值

变量+=表达式

-=

减后赋值

变量-=表达式

<<=

左移后赋值

变量<<=表达式

>>=

右移后赋值

变量>>=表达式

&=

按位与后赋值

变量&=表达式

^=

按位异或后赋值

变量^=表达式

|=

按位或后赋值

变量|=表达式

11

逗号运算符

表达式,表达式…

左到右

备注:同一优先级的运算符,运算次序由结合方向决定

           算数运算符 > 关系运算符 > 逻辑和 > 逻辑或 > 赋值    


### C++运算符优先级求值顺序 C++运算符优先级决定了表达式中操作的执行顺序。高优先级运算符会比低优先级运算符先执行。如果多个运算符具有相同的优先级,则由它们的结合性(associativity)决定操作顺序,通常是左结合或右结合[^3]。 以下是一个简化的 C++ 运算符优先级表(从高到低排列),并附有相关的结合性和示例: | 优先级 | 运算符 | 描述 | 结合性 | |--------|----------------|------------------|------------| | 1 | `::` | 作用域解析 | 左结合 | | 2 | `++` `--` | 后缀递增/递减 | 左结合 | | | `()` `[]` | 函数调用、数组下标 | 左结合 | | | `.`, `->` | 成员访问 | 左结合 | | 3 | `++` `--` | 前缀递增/递减 | 右结合 | | | `+` `-` | 单目正负号 | 右结合 | | | `!` `~` | 逻辑非、位取反 | 右结合 | | | `*` `&` | 解引用、取地址 | 右结合 | | | `(type)` | 强制类型转换 | 右结合 | | | `sizeof` | 获取类型大小 | 右结合 | | 4 | `*` `/` `%` | 乘法、除法、取模 | 左结合 | | 5 | `+` `-` | 加法、减法 | 左结合 | | 6 | `<<` `>>` | 位移位 | 左结合 | | 7 | `<` `<=` | 小于、小于等于 | 左结合 | | | `>` `>=` | 大于、大于等于 | 左结合 | | 8 | `==` `!=` | 等于、不等于 | 左结合 | | 9 | `&` | 按位 | 左结合 | | 10 | `^` | 按位异或 | 左结合 | | 11 | `|` | 按位或 | 左结合 | | 12 | `&&` | 逻辑 | 左结合 | | 13 | `||` | 逻辑或 | 左结合 | | 14 | `?:` | 条件运算符 | 右结合 | | 15 | `=` `+=` `-=` | 赋值、复合赋值 | 右结合 | | | `*=` `/=` `%=` | | | | | `<<=` `>>=` | | | | | `&=` `^=` `|=` | | | | 16 | `,` | 逗号运算符 | 左结合 | ### 示例代码 ```cpp int a = 16; ++a += 3; ``` 在该表达式中,由于前置递增运算符 `++` 的优先级高于复合赋值运算符 `+=`,因此首先执行 `++a`,然后将结果 `3` 相加,并最终赋值给 `++a` 返回的左值。初始状态下 `a` 的值为 `16`,执行 `++a` 后变为 `17`,再执行 `17 += 3`,最终 `a` 的值变为 `20` [^1]。 ### 表达式求值顺序 除了运算符优先级结合性之外,C++ 中还存在运行时表达式参数的求值顺序问题。例如,在函数调用中,函数参数的求值顺序是未定义的,这可能导致某些表达式产生不确定的行为[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值