i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
From: http://blog.csdn.net/leo115/article/details/8101541
我們通常在寫for循環(huán) 的時(shí)候,要實(shí)現(xiàn)變量 i 的自增 1 ;往往會在i++ 和++i中隨便挑一種寫,對于i++和++i的理解,我們往往停留在返回的值的不同,其實(shí)i++與++i在實(shí)現(xiàn)效率上也有一定的不同(不考慮編譯器優(yōu)化的原因)。
++i的實(shí)現(xiàn)效率更高
解釋如下:
i++ (在C++中) 在實(shí)現(xiàn)的時(shí)候,系統(tǒng)會產(chǎn)生一個(gè) local object class INT的臨時(shí)變量 用于存儲原有的數(shù)據(jù)供返回值用;
[cpp] view plaincopy
++i更高效
說明:
1、在不考慮編譯器優(yōu)化的條件下,前綴(++i)比后綴(i++)要少一步開辟臨時(shí)變量的操作,所以前綴效率更高。
2、對于內(nèi)置數(shù)據(jù)類型,由于編譯器優(yōu)化的原因,前綴和后綴的效率沒什么差別。
例如:對于 int 型變量,編譯器可以優(yōu)化掉開辟臨時(shí)變量這份多余的工作。
3、對于自定義的數(shù)據(jù)類型(類),我們在使用 自增 運(yùn)算符的時(shí)候,需要重載 ++ 運(yùn)算符,在重載的時(shí)候,后綴要開辟一個(gè)臨時(shí)變量,所以前綴的效率要比后綴的更高。
Stl中迭代器使用的是 前綴
自定義類型的 前綴和后綴 的重載的 實(shí)現(xiàn)方式如下:
說明:如果考慮對 前綴(++i --i) 重載形式為 ?Type operator++() ;
? ? 后綴(i++ i--)的重載形式為:Type operator++(int); (這樣定義是為了實(shí)現(xiàn)前綴與后綴的區(qū)分)
[cpp] view plaincopy
運(yùn)算結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IIS 日志文件位置
- 下一篇: avalon2学习教程15指令总结