int i = 0;
i = i++;
c++下结果是1,
4: int i=0;
00401058 mov dword ptr [ebp-4],0
5: i=i++;
0040105F mov eax,dword ptr [ebp-4]
00401062 mov dword ptr [ebp-4],eax
00401065 mov ecx,dword ptr [ebp-4]
00401068 add ecx,1
0040106B mov dword ptr [ebp-4],ecx
c++是面向过程的语言,++运算符的意义是执行完当前语句之后,将目标值加1。
在java和C#下结果却是0,
JVM 模拟一个基于stack(堆栈)的 CPU。
也就是说这个CPU里面的存储器是stack结构的,特点是好像一个大坑,先掉进去的最后才能爬出来。
那么我们看一下你的反汇编代码。
int i = 0;
i++;
这个反编译出来的是:
0:iconst_0将常数0推入stack
1:istore_1从stack中弹出一个值(这个值显然是刚刚推入的0)存储到变量索引为1的位置(也就是我们的i)
2:iinc1, 1将变量索引为1的变量(也就是我们的i)值增加1,现在i变成了1
5:return返回
int i = 0;
i = i + 1;
反编译的结果是:
0:iconst_0将常数0推入stack
1:istore_1从stack中弹出一个值(这个值显然是刚刚推入的0)存储到变量索引为1的位置(也就是我们的i)
2:iload_1将变量索引为1的变量值推入stack,现在stack里面只有一个值: 0
3:iconst_1将变量1推入stack,现在stack里面有两个值,依次(推入次序)为: 0, 1
4:iadd从stack中弹出两个值进行相加,并将结果推入stack,现在stack里面又剩下一个值: 1 (因为0 + 1 = 1)
5:istore_1从stack中弹出一个值(这个值显然是刚刚算出的1)存储到变量索引为1的位置(也就是我们的i),现在i变成了1
6:return返回
int i = 0;
i = i ++;
反编译的结果是:
0:iconst_0将常数0推入stack
1:istore_1从stack中弹出一个值(这个值显然是刚刚推入的0)存储到变量索引为1的位置(也就是我们的i)
2:iload_1将变量索引为1的变量值推入stack,现在stack里面只有一个值: 0
3:iinc1, 1将变量索引为1的变量(也就是我们的i)值增加1,现在i变成了1
6:istore_1从stack中弹出一个值(这个值应该是前面2的位置推入的0)存储到变量索引为1的位置(也就是我们的i),现在i又变成了0
7:return返回
java是纯面向对象的。所有运算符都回被当作函数来对待。java中的++运算符和c++中重载++运算符很相似
相关推荐
7. **故障排查**:当应用程序因libstdc++问题而崩溃或无法运行时,可以尝试更新库,或者使用`ldd`、`objdump`等工具检查依赖关系。在某些情况下,可能需要静态链接库避免运行时依赖问题,但这会使可执行文件体积增大...
1.修复CIA Hacking Notepad ++问题(https://wikileaks.org/ciav7p1/cms/page_26968090.html)。 2.将鼠标滚轮固定到任务列表滚动崩溃错误。 3.解决修改或从外部删除文档后切换回来闪烁问题。 4.支持摩托罗拉S-...
i++的描述,挺好的资源,做了比较经典的分析,大家共享
Vue技术七大问题避坑指南+编程技术开发+编程问题+编程案例Vue技术七大问题避坑指南+编程技术开发+编程问题+编程案例Vue技术七大问题避坑指南+编程技术开发+编程问题+编程案例Vue技术七大问题避坑指南+编程技术开发+...
5. PointNet++问题: PointNet++模型也存在一些问题: * 没有考虑到局部特征的融合 * 没有考虑到点云数据之间的关系 * 需要大量的计算资源和时间 6. PointNet++改进方向: PointNet++模型可以通过以下方法进行...
解决ubuntu找不到libstdc++.so.5问题: 一般是你的gcc版本比较高,自从gcc出3.4版本后,就不用libstdc++.so.5,改用libstdc++.so.6了。 如果sudo apt-get install libstdc++5 未果,说找不到这个包,就下载该资源...
这个绿色工具被封装在名为"spy++.zip"的压缩包中,无需安装即可直接使用,为开发者提供了一个便捷的环境来检测和解决程序UI的显示问题。 Spy++ 的主要功能包括: 1. **窗口查找与监控**:它可以查找并显示系统中的...
- **使用兼容性层**:有一些第三方工具如`cxxabi`可以创建一个兼容层,使得使用`lstdc++`编译的库能在libc++环境中运行,但这可能会带来额外的复杂性和潜在的问题。 - **回退Xcode版本**:如果项目对旧版本库有...
OpenMVS注释+重建结果+运行常见问题+相关理论+传统多视图三维重建 MVS论文 集合(稠密重建、曲面重建、网格优化、纹理贴图、综述) OpenMVS注释+重建结果+运行常见问题+相关理论+传统多视图三维重建 MVS论文 集合...
3. 验证与检查:插件提供了一套验证工具,用于检查导入的ODB++数据是否完整、准确,是否存在潜在的制造问题。例如,它可以检查层设置、焊盘和走线的尺寸,确保它们符合制造规范。 4. 层级管理和映射:插件支持...
美赛真题解析:资源的可利用性与性别比例问题+编程知识+技术开发; 美赛真题解析:资源的可利用性与性别比例问题+编程知识+技术开发; 美赛真题解析:资源的可利用性与性别比例问题+编程知识+技术开发; 美赛真题...
在编程领域,我们经常需要解决各种数学问题,其中包括序列求和。本示例涉及的是一个特殊的序列求和问题,即高斯求和。这个题目要求使用Delphi 7.0来计算1到100的阶乘和,也就是S=1+(1+2)+(1+2+3)+...+(1+2+3+...+100...
#### 一、问题背景 在安装 SQL Server 2005 过程中,可能会遇到与 COM+ 相关的问题。这类问题通常表现为安装程序无法正常完成安装流程,或者在安装过程中提示与 COM+ 相关的错误信息。本文将详细介绍如何解决这些...
Spy++ Lite版是一款专为那些只安装了Visual Studio Express版,无法使用完整版Spy++的用户设计的轻量化工具。Spy++通常是一个强大的Windows应用程序,用于监控系统中的窗口、消息、线程和进程,它是Microsoft Visual...