i=i++到底是怎么执行的
来源:互联网 发布:攀枝花学院知乎 编辑:程序博客网 时间:2024/06/03 17:44
i=i++,在不同的语言中的执行应该是一样的,即:
temp = i;i++;i = temp;
把程序反编译可以看出汇编语句的执行步骤:
先把i的值存到eax寄存器,eax的值再赋给ecx,然后ecx自增,ecx自增后赋值给变量i,最后eax的值赋给变量i把自增覆盖掉
有人说C++的执行会不一样,我用visual 6.0测试了一下,果然:
但是,这只是在visual 下编译运行的情况,同一段程序,换个编译器,结果又不一样了:
那么i=i++到底怎么执行呢?
测试过几个不同的平台,C,C++,OC,JAVA等多种语言,mac,win,linux,多种环境,大部分编译器都是 temp = i;i++;i = temp; 这种结果,除了visual。在很多编译器编译i=i++的时候会报一个
multiple unsequenced modifications to 'i'
的警告。i=i++这种写法很不便于理解,也容易产生歧义,如果写自增,就单独一条语句i++,如果要赋值,尽量用j = i++这种语句。代码结构要清晰,应尽量避免写出容易让人误解的代码。
阅读全文
0 0
- i=i++到底是怎么执行的
- SQL语句到底是怎么执行的?
- 比较 i++ 和 i=i+1的执行效率
- i = i++为什么会是i原来的值??
- i = i++ 之后 i 的值为什么是 0
- i++ ,++i,i=i++的问题
- i++ ,++i,i=i++的问题
- bytes[i] & 0xf0是怎么运算的
- bytes[i] & 0xf0是怎么运算的
- bytes[i] & 0xf0是怎么运算的
- i++和++i是怎么用的?它们作为函数参数时的使用举例
- 到底输出的是j[i]是数组j中的哪一个元素
- for的执行过程 (++i, i++)
- i++ 与 ++i 的执行过程
- 微信小程序示例使用到了大量的for+i+function+function组合代码到底怎么理解
- 在XSL里执行类似for(i=0;i〈x;i++)的循环
- 在XSL里执行类似for(i=0;i〈x;i++)的循环
- 在XSL里执行类似for(i=0;i<n;i++)的循环
- Spring Security的集合初解
- PHP学习(4)-时间的处理总结
- The Suspects POJ
- 单独编译
- GGB0/OB28/OKC7/GGB1/OBBH/OKC9 FICO增强
- i=i++到底是怎么执行的
- android GreenDAO3.2.2简单使用
- Spring Boot Actuator监控页面报错解决
- Navicat for mysql Mac 快捷键
- PLC编程再思考之一:MapReduce
- python正则表达式简介
- 【Scikit-Learn 中文文档】模型评估: 量化预测的质量
- 介绍一下Spring Cloud Config
- 今天想起论语十则,记下来勉励自己