比较下面两段代码:
1 2 3 4 | for(int i = 0; i < n; i++) { //~ do something; } |
1 2 3 4 | for(int i = 0; i < n; ++i) { //~ the same thing; } |
区别仅仅在于i++还是++i,相信大部人都是第一种风格,但在大部分的编译器里,++i是比i++快的。在linux下用time命令测试这两个循环,n = 1000000000时,两个程序运行的时间分别是
real 0m4.413s user 0m4.376s sys 0m0.012s
vs.
real 0m4.753s user 0m4.728s sys 0m0.008s
可见,差别是存在的,原因据说是:++i是直接在i的内存单元上操作,而i++则是先把i值取出到寄存器中,再执行加法操作,这种差别是和这两种操作方法取得返回值不同有很大联系的,我想这应该还会和编译器的实现有关吧。
但是不要忘了这时的n是很大的,两种用法不成为程序的瓶颈,但是养成一个好的风格和习惯还是必要的。
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
嗯,我早就习惯了++i。
不过原因应该不是那个据说吧。
用两个函数来类比:
++i EQUALS TO
inline func1(int &i){ i = i + 1; return i;}
i++ EQUALS TO
inline func1(int &i){ int t = i; i = i + 1; return t;}
有什么不同吗?看一下汇编代码,也就是我说的那样啊。^_^