i++与++i单独用时的效果是一模一样的,但是如果突然要你说他们俩的区别,你又能不能回答上来呢?这篇博文,我们就完全弄懂他们俩兄弟的区别!
基本概念
i++和++i要是单独使用的话效果是一样的,都是i=i+1,实验证明:
i++ 代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i = 0;
i++;
cout << i;
return 0;
}
i++ 运行结果:
1
++i 代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i = 0;
++i;
cout << i;
return 0;
}
++i 运行结果:
1
区别
方法1:测试
我们假设一个变量是a,那么a=i++与a=++i的运行结果就不太一样了,我们分别说明
i++:
i++其实就是先干活后吃饭,这里的干活就是指被赋值到变量a的上面,吃饭就是自增1
++i:
++i和i++相反,即先吃饭后干活,先执行的是i=i+1,再被赋值到变量a中
这里给大家准备了一个比较好理解的图片:
我们依然以一个实验来证明:
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i = 3;
cout << "This is i++:\n";
int a1 = i++;
cout << "i:" << i << " a:" << a1 << "\n";
cout << "This is ++i:\n";
i = 3;
int a2 = ++i;
cout << "i:" << i << " a:" << a2 << "\n";
return 0;
}
运行结果:
This is i++:
i:4 a:3
This is ++i:
i:4 a:4
方法2:看汇编代码
汇编代码这里就不给大家截图了,大家可以自己去试一试
i++先是3次mov(移动),然后才add(增加),最后再来一次mov,而++i先1次mov,接着直接自增,最后再3次mov
效率
之前我做过一个实验,也就是看控制台下方的时间,结果就是++i比i++要稍快一些,但是这两段代码的区别不大,要是极度追求效率,推荐++i
那么这是为什么呢?
回到他们俩之间的区别,a = i++时a为3,其实这个3在一些人的理解中并不是原先的i,而是i++时生成的一个临时变量,这个临时变量的生成拖延了i++的时间,而++i就是直接干脆利落的i+=1,并没有其他什么麻烦的操作
这个结论在基本编程中没有太多应用,但是在自定义类型中,应该尽量使用快一点的++i
最后,如果这篇博客对你有帮助,请您帮我点个推荐,谢谢!
标签:搞定,变量,区别,++,代码,mov,实用,int From: https://www.cnblogs.com/charzie-blog/p/18175671