2012-03-29 59 views
1

可能重複:
Is there a performance difference between i++ and ++i in C++?優化代碼:++ p比p ++更快嗎?

C++,我看到人們在for環或其他地方,要增加值經常使用++p,而不是使用返回值。我聽說這樣更有效率,因爲p++在之前返回值,因此需要臨時空間。

但是,感覺即使是一個非常無知的編譯器也會將該返回值作爲死代碼(只要增量代碼被內聯,因此編譯器可以看到返回值不是必需的)。

我試圖拿出一個很好的例子,使用某種迭代,iter++將實際創建副本(即使不使用的iter++返回值。

畢竟,我們不「噸真的經常考慮寄存器分配或者當我們寫代碼迭代器。

我學會了用p++只是因爲這是我從學到的書本一樣。是寧願++p時沒有返回值,使用了過時的做法,或者乾脆部分優雅的編碼?爲什麼語言不叫++C呢?

+0

取決於'p'是什麼。它是一個「迭代器」嗎? 'int'?通常情況下,編譯器會優化這些東西。 – Marlon 2012-03-29 21:18:50

+1

嗯,解析一個1000000字符的字符串,並刪除所有非alpha字符需要0.0150秒在我的電腦上。 ++ p和p ++的區別真的很重要嗎? – BlackBear 2012-03-29 21:20:15

回答

5

p++只有在++p沒有完成這項工作 - 即您實際使用返回值時纔會變慢。否則,編譯器會將代碼優化爲相同的東西。

人們更喜歡使用++i代替i++,因爲它描述了更好的你打算怎麼做:增量i,超過遞增i,並返回舊值。當然,你傾向於堅持舊習慣。如果您習慣於編寫i++,那沒關係,除非您使用公司的編碼標準使用++i

d &電子商務第3章:``我選C++,因爲它很短,有很好的 解釋,並且是形式的 「形容詞C.」」在C不,++就可以了, 視在上下文中,可以理解爲「下一個」,「繼任者」或「增量」,儘管它總是發音爲「加上加號」。名字C++及其 亞軍++ C是笑話和雙關語的肥沃來源 - 幾乎所有的 ,這些名字在選擇名稱之前就已知曉和讚賞。名稱 C++由Rick Mascitti提議。它被編輯到[Stroustrup,1984]和 [Stroustrup,1984c]的最終版本中,於1983年12月首次用於 。

TC++ PL的第1章:``的名稱C++(發音 「看見加加」)是由瑞克Mascitti在1983年 名稱表示的選自C的變化演變性質夏季杜撰; 「++」 是C增量運算符。稍短的名稱「C +」是 語法錯誤;它也被用作不相關的 語言的名稱。 C語義鑑賞家發現C++低於++ C。 語言不稱爲D,因爲它是C的擴展,並且 不嘗試通過刪除功能來解決問題。對於還沒有名字的C++的另一 解釋,參見[奧威爾,1949]的附錄。「」

Sauce.

2

根據迭代器,創建副本可以是一個耗時的任務極其時間(考慮關於二進制搜索樹的基於堆棧的迭代器)。我想你應該認識到,但這不是你真正的問題:)。無論如何,就我所知,編譯器不需要優化i ++到++ i。因爲不需要對它進行優化,所以我認爲最好謹慎一點,並堅持使用++ i。