Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【解读】C++运算符优先级,强烈建议收藏

【解读】C++运算符优先级,强烈建议收藏

作者头像
小码匠
发布于 2024-01-14 12:26:51
发布于 2024-01-14 12:26:51
2510
举报

大家好!我是老码农。

今天分享:C++运算符优先级。

编代码时候经常会涉及复杂运算,运算符的优先级一定要记清楚,很多并不是我们认为的那样,例如:最常用的

  • a++ a--++a --a,并不是优先级一样。
  • 这个表也有一些规律,例如一般【与】比【或】的优先级高,例如
    • &|
    • &&||

运算符优先级列表

列表

  • 从上到下依次减弱,注意【结合性】列的描述

优先级

运算符

描述

结合性

1

::

作用域解析

从左到右

2

a++ a--

后缀自增与自减

从左到右

2

*type*() *type*{}

函数风格转型

从左到右

2

a()

函数调用

从左到右

2

a[]

下标

从左到右

2

. ->

成员访问

从左到右

3

++a --a

前缀自增与自减

从右到左

3

+a -a

一元加与减

从右到左

3

! ~

逻辑非和逐位非

从右到左

3

(*type*)

C 风格转型

从右到左

3

*a

间接

从右到左

3

&a

取址

从右到左

3

sizeof

取大小

从右到左

3

co_await

await 表达式 (C++20)

从右到左

3

new new[]

动态内存分配

从右到左

3

delete delete[]

动态内存分配

从右到左

4

.* ->*

成员指针

从左到右

5

a*b a/b a%b

乘法、除法与余数

从左到右

6

a+b a-b

加法与减法

从左到右

7

<< >>

逐位左移与右移

从左到右

8

<=>

三路比较运算符(C++20 起)

从左到右

9

< <=

分别为 < 与 ≤ 的关系运算符

从左到右

9

> >=

分别为 > 与 ≥ 的关系运算符

从左到右

10

== !=

分别为 = 与 ≠ 的相等性运算符

从左到右

11

&

逐位与

从左到右

12

^

逐位异或(互斥或)

从左到右

13

`

`

逐位或(可兼或)

14

&&

逻辑与

从左到右

15

`

`

16

a?b:c

三元条件

从右到左

16

throw

throw 运算符

从右到左

16

co_yield

yield 表达式 (C++20)

从右到左

16

=

直接赋值(C++ 类默认提供)

从右到左

16

+= -=

以和及差复合赋值

从右到左

16

*= /= %=

以积、商及余数复合赋值

从右到左

16

<<= >>=

以逐位左移及右移复合赋值

从右到左

16

&= ^= `

=`以逐位与、异或及或复合赋值

从右到左

17

,

逗号

从左到右

解读

这段摘自cppreference的解读

对于优先级不同的运算符

列于上面表中某行的运算符,将比列于低于它的行中拥有较低优先级的任何运算符,更紧密地与其实参相绑定(如同用了括号)。例如,表达式 std::cout << a & b 和 *p++ 会被分析为 (std::cout<< a) & b 和 *(p++),而非 std::cout << (a & b) 或 (*p)++

对于优先级相同的运算符

拥有相同优先级的运算符以其结合性的方向与各参数绑定。例如表达式 a = b = c 会被分析为 a = (b = c) 而非 (a = b) = c,因为赋值具有从右到左结合性,但 a + b - c 会被分析为 (a + b) - c 而非 a + (b - c),因为加法和减法具有从左到右结合性。

对于常用的运算符

常用的运算符一定要能分清优先级,例如,经常用到

  • a++ a--++a --a
  • &&||
  • 还有各种位运算,位运算优先级相对较低

千万别搞混了,搞混了,运算结果肯定跟自己想像的不一样。

经验之谈

当优先级不太能确定时,可以考虑加括号,括号的优先级通常是比较高的,加括号出错的概率是比较小的。

参考文章

  • C++ 运算符优先级
    • https://zh.cppreference.com/w/cpp/language/operator_precedence
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
操作符的属性:优先级、结合性(缺表达式求值)
C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。
用户11328191
2024/10/23
2140
操作符的属性:优先级、结合性(缺表达式求值)
C++运算符执行顺序对照表
C++运算符执行顺序对照表:在线查看C++运算符执行优先级别 窍门: Ctrl+F 快速查找
很酷的站长
2022/12/04
7190
C++运算符执行顺序对照表
C++运算符优先级
C++运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和除,再执行加减运算。
老九学堂-小师弟
2019/10/09
4.7K0
Java运算符及运算符的优先级
赋值运算符算术运算符关系运算符逻辑运算符位运算符三目运算符instanceof运算符
用户7886150
2021/04/25
1.2K0
js运算符优先级笔记
运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。 下面是一个简单的例子: 3 + 4 * 5 // 计算结果为23 乘法运算符 (“*”)比起加法运算符(“+”)有着更高的优先级,所以它会被最先执行。 结合性 结合性决定了拥有相同优先级的运算符的执行顺序。考虑下面这个表达式: a OP b OP c 左结合(从左到右计算)相当于把左边的子表达式加上小括号(a OP b) OP c,类似的,右关联(从右到左计算)相当于a OP (b OP c)。赋值运算符是右关联的,所
练小习
2018/01/15
2.1K0
js运算符优先级笔记
C:03---运算符优先级
这里区别于指针的++和--, --(++)变量 表示变量先-1(+1),再返回表达式的值。若运算符在变量后则表示先使用变量,然后变量-1(+1)。
用户3479834
2021/02/03
5720
C:03---运算符优先级
java运算符及优先级由高到低_java中运算符优先级排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
4030
C语言运算符优先级
近期在学习C语言,遇运算符优先级,遂记录之。 ps.学长说这是期末考点,记它干啥?愣着啊!
MoyiTech
2023/02/27
7570
C语言运算符优先级
C语言运算符优先级列表(超详细)
每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家。
全栈程序员站长
2022/11/09
9.8K0
关于php运算符优先级的几道题
今天正好群里有人在问一道php运算符优先级的问题,正好以前也遇到过类似的问题,这里整理一下吧,方便大家理解 以防掉坑:) 先来道简单的: $a = 3; if ($a = 5) { $a++; } var_dump($a);// (int)6 这里掉坑的同学会认为是3. 注意=号是赋值 == 比较运算符 所以一个好的编码习惯 对于数字来说 最好把它放前面写成 5 == $a 这样即使你写成了 5 = $a 此时会报错 不会是隐式的赋值 来,我们接着看下一个坑. $x = 2; echo $x =
wangxl
2018/03/08
1K0
Python全网最全基础课程笔记(三)——所有运算符+运算符优先级
Python中的运算符优先级决定了在包含多个运算符的表达式中,各个运算符的执行顺序。优先级高的运算符会先于优先级低的运算符执行。以下是Python中所有运算符的优先级列表,按照从高到低的顺序排列。
小白的大数据之旅
2024/11/20
3780
Python全网最全基础课程笔记(三)——所有运算符+运算符优先级
【c语言】运算符汇总(万字解析)
为了促进大家深入理解C语言并提升学习效率,本博客作者将对C语言中常用运算符的功能及其使用方法进行全面梳理,同时整合归纳这些运算符的优先级、结合性以及表达式求值规则。
ephemerals__
2024/10/30
1.1K0
【c语言】运算符汇总(万字解析)
【C语言】C语言运算符优先级详解
在C语言中,运算符的优先级决定了表达式中各个运算符的计算顺序。了解这些优先级对于正确理解和编写复杂表达式至关重要。本文将深入探讨C语言中各种运算符的优先级及其影响。
学习起来吧
2024/03/23
1.2K0
【C语言】C语言运算符优先级详解
java基础六(运算符)
1、前缀自增自减法(++a,--a): 先进行自增或者自减运算,再进行表达式运算。
用户7886150
2020/12/10
3630
C语言:操作符详解
由于这些操作符都是有两个操作数(位于操作符两边),所以这种操作符也叫做双目操作符。
小陈在拼命
2024/02/17
2190
C语言:操作符详解
c语言操作符万字超详解
上面的操作符中,算术操作符、赋值操作符、逻辑操作符、条件操作符和一些单目操作符已经在之前的博客中有所提及,这里就不再赘述了。
fhvyxyci
2024/09/24
2190
c语言操作符万字超详解
运算符优先级
我们先后学习了不同的运算符,通过运算符我们的能进行各种不同的操作实现自己的想要的效果,但是此时还存在一个问题,当在一个表达式中,有可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象. 由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算,这是因为,在当表达式含有多种运算符的时候,必须要按照一定的顺序进行结合才能保证运算的正确,也就是说,各运算符之间有一定的优先级,你只要掌握了它们的优先级,就能完美的实现自己想要的结果。 从表中我们能看到,优先级顺序从高到低,也就是优先级为1
老九君
2022/03/15
7930
Dart 运算符
该表按从高到低的顺序显示了 Dart 的运算符结合性和 运算符优先级 ,这只是 Dart 运算符关系的 近似值 。
用户3562254
2025/02/05
1410
【C语言】符号优先级详解 -《谁与争锋 ! 》
在C语言中,不同的运算符具有不同的优先级和结合性,这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级,包括各类运算符的优先级、结合性及其应用示例。
LuckiBit
2024/12/11
2570
开心档之C++ 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C++ 内置了丰富的运算符,并提供了以下类型的运算符:
爱学iOS的小麦子
2023/05/05
2450
相关推荐
操作符的属性:优先级、结合性(缺表达式求值)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档