雪傲天1 2023-03-15 17:19 采纳率: 96.2%
浏览 23
已结题

请问这里面是先运行a++呢还是先运行++a呢,为什么呢



```c++

2*a+++++a*4


请问这里面是先运行a++呢还是先运行++a呢,为什么呢

```

  • 写回答

2条回答 默认 最新

  • qq_53090785 2023-03-15 17:37
    关注

    表达式可以看成(2i++)+ (++i4),接下来就是判断先运行左边还是右边,下面引用这篇文章
    https://blog.csdn.net/weixin_40539125/article/details/93793670
    到这里,我们已经知道了表达式的两个行为特征了,如下:

    1. 复合表达式是会考虑优先级和结合律的。

    2. 运算对象的求值顺序与优先级、结合律没有关系。

    大多数运算符都没有规定表达式中运算对象的求值顺序,对于互不影响的函数之间,这并没有什么问题,但如果这几个函数共同影响同一个全局变量就会出现问题。

    因此在C++ Primer第五版的123页中才会有这么一说:

    “因为表达式的行为不可预知,因此不论编辑器生成什么样的代码程序都是错误的。”
    是的,因为求值顺序没有规定,怎么样都有可能,这样的代码即使语法毫无问题,他也是错误的!

    所以有两条经验准则用于书写复合表达式:

    1. 拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。

    2. 如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端