9 個使用C++11的理由

jieforest發表於2012-05-28
如果你的程式碼工作正常並且表現良好,你可能會想知道為什麼還要使用C++ 11。當然了,使用用最新的技術感覺很好,但是事實上它是否值得呢?在我看來,答案毫無疑問是肯定的。我在下面給出了9個理由,它們分為兩類:效能優勢和開發效率。


獲得效能優勢

理由1:move語義(move semantics)。簡單的說,它是優化複製的一種方式。有時候複製很顯然是浪費的。如果你從一個臨時的string物件複製內容,簡單的複製指標到字元緩衝區將比建立一個新的緩衝區再複製要高效得多。他之所以能工作是因為源物件超出了範圍。

然而,在這以前C++並沒有判斷源物件是不是臨時物件的機制。move語義通過除了複製操作外還允許你有一個move建構函式(move constructor)和一個move賦值運算(move assignment)符來提供這個機制。

你知道嗎?當你在Visual Studio 2010中使用標準庫中的類如string或vector時,它們已經支援move語義了。這可以防止不必要的的複製從而改善效能。

通過在你的類中實現move語義你可以獲得額外的效能提升,比如當你把它們儲存到STL容器中時。還有,move語義不僅可以應用到建構函式,還可以應用到方法(如vector的push_back方法)。

理由2:通過使用類別屬性(type traits,如is_floating_point)和模板超程式設計(template metaprogramming,如enable_if template),你可以為某些特定的型別定製模版,這可以實現優化。

理由3:雜湊表現在已經是標準實現的了,它提供更快速的插入、刪除和查詢, 這在處理大量資料時很有用。你現在可以隨便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset這幾種資料結構了。

提高效率

提高效率不僅都是在程式碼效能方面,開發時間也是寶貴的。C++ 11可以讓你的程式碼更短、更清晰、和更易於閱讀,這可以讓你的效率更高。

理由4:auto關鍵字可以自動推斷型別,所以下面的程式碼:
vector>::const_iterator it = v.begin()

現在可以很簡單的寫成:
auto it = v.cbegin()

儘管有些人會說,它隱藏了型別資訊,在我看來它利大於弊,因為它減少了視覺混換並展示了程式碼的行為,還有它可以讓你我少打很多字!

理由5:Lambda表示式提供了一種方法來定義匿名方法物件(實際上是閉包),這是程式碼更加線性和有規律可循。這在和STL演算法結合使用時很方便:
bool is_fuel_level_safe()
{
    return all_of(_tanks.begin(), _tanks.end(),
        [this](Tank& t) { return t.fuel_level() > _min_fuel_level; });
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/301743/viewspace-731268/,如需轉載,請註明出處,否則將追究法律責任。

相關文章