i++和++i的代码分析
来源:互联网 发布:休闲网游推荐 知乎 编辑:程序博客网 时间:2024/06/08 11:18
http://www.cnblogs.com/heiyue/archive/2011/10/27/2226560.html
i++和++i的代码分析
最近看到这么一段代码:
代码1.cpp:
#include <iostream>using namespace std;int a=4;int main(){ a+=a++; cout<<a<<endl; return 0;}
输出结果:
===============================================================
代码2.cpp
#include <iostream>using namespace std;int a=4;int main(){ a+=++a; cout<<a<<endl; return 0;}
输出结果:
上面2个的结果很大不同,
a+=a++;和a+=++a;这2个表达式具体做了什么呢?下面是使用gcc编译出来的汇编代码(AT&T格式),限于篇幅,只上传2者不同的地方。
对于a+=a++而言,
对于i+=++i而言,
从2者的汇编代码,我们可以分析具体的差异性在哪里,注意红框里面的语句。
对于a+=a++来说,里面的2个movl操作导致了已经被赋值为8的a,被5所覆盖,因此a的值最终输出的时候变成了5。
对于a+=++a来说,edx和eax这2个寄存器都被a自增后的值所覆盖,也就是2个5相加,最终的结果值是10。
通过汇编的比较分析,很容易看出来这2个表达式行为上的不同之处,很小的细节。
- i++和++i的代码分析
- i++和i--的分析和运用
- ++i,i++,--i和i--的区分
- i++与i--的分析
- 看代码写输出i++和++i的区别
- i++和++i ,i--和--i的使用方法和作用
- 关于 i++ 和 ++i i-- 和 --i 的那些事儿
- i++和++i, i--和--i的区别
- i++和++i的区别
- i++和++i的问题
- i++ 和 ++i 的问题
- i++和i++的用法
- "i++"和"++i"的区别
- ++i 和 i++ 的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- 通用寄存器
- shell 清空文件
- AT&T汇编语言与GCC汇编简介
- 汇编语言之寄存器使用(bx,si,di,bp)
- 贝叶斯、概率分布与机器学习
- i++和++i的代码分析
- C++中explicit关键字的作用
- TCP/UDP数据结构
- 黑马程序员—_面向对象(一)
- 关于 ios 页面信息传递方式 delegate 和 NSNotificationCenter
- JS两种方法实现当前时间显示
- QT creator 工具的介绍 qt学习笔记第二章
- Tomcat Server.xml详解
- 一起读nodejs(八)----域(domain)