关于C++运算顺序的记录

这两天因为自考的题目在研究一个很让我不理解的知识点,那就是关于C++表达式的运算顺序。其中加减乘除那些都还好,唯一让我感到头疼的是前置++和后置++。在浏览了网上的不少大佬的详解后,才算慢慢的找到一些自己的理解方式,特此记录。

首先感谢大佬的文章

一文搞懂C++常见运算符优先级_c++ 运算优先级_sarexpine的博客-CSDN博客

8.【C/C++优先级详解】_吉士先生的博客-CSDN博客

然后是自己的理解

首先是那时候疑惑的问题

我最初看完sarexpine大佬的博客之后,我对前置后置运算的理解就是,前置是先+/-1,然后再进行运算。而后置是先进行运算,而那个元素再这个表达式外自行+/-1 。但是后来有个题目让我比较懵逼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>

int main()
{
int a = 5;
int b = 2;
int c;

c = a++ + b++ + --a; // c=12
printf("Line 6 - c 的值是 %d, a 的值是 %d", c, a);

return 0;
}

运算结果就是c=12,我想,不对啊?这表达式写出来不是c = 5 + 2 + 4 等于11吗?怎么就12了?然后看到左结合和右结合的名词,捣鼓一番后才终于理出了思路。

我的惯性思维其实是错误的,那就是整个表达式c = a++ + b++ + –a这个表达式执行完之后,才算完成。但是按照上面的结论来看,其实运行过程是这样的:

先–a,也就是5-1=4,此时a=4
然后是b++和a++,此时b=3,a=5,注意!这里已经直接把转变后的值放在表达式了,也就是说带入进表达式的值是他们++后的值,是不是类似于++a和++b?是的,我也没懂,但就是如此。