開始使用C 11的幾個理由

2021-07-07 04:47:53 字數 1653 閱讀 9567

c++11新特性介紹了一段時間,至今為止也差不多了。是要總結的時候了:

你可能會問我,為什麼需要c++11呢,我這就給出理由:

理由1:《c++11新特性之 move semantics(移動語義)》

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:《**整理c++11新特性》

auto關鍵字可以自動推斷型別,所以下面的**:

vector

>::const_iterator it = v.begin()

現在可以很簡單的寫成:

auto it =v.cbegin()
儘管有些人會說,它隱藏了型別資訊,在我看來它利大於弊,因為它減少了視覺混換並展示了**的行為,還有它可以讓你我少打很多字!

理由5:lambda表示式提供了一種方法來定義匿名方法物件(實際上是閉包),這是**更加線性和有規律可循。這在和stl演算法結合使用時很方便:

bool is_fuel_level_safe()

); }

理由3:新的智慧型指標(smart pointer)替換了有問題的auto_ptr,你可以不用擔心記憶體的釋放並移除相關釋放記憶體的**了。這讓**更清晰,並杜絕了記憶體洩露和查詢記憶體洩露的時間。

理由4:《c++11新特性之std::function》把方法作為first class object是乙個非常強大的特性,這讓你的**變得更靈活和通用了。c++的std::function提供了這方面的功能。方法提供一種包裝和傳遞任何可呼叫的東西-函式指標, 仿函式(functor), lambda表示式等。

理由5:《c++11特性之override和final關鍵字》還有許多其它小的功能,如override、final關鍵字和nullptr讓你的**意圖更明確。對我來說,減少視覺混亂和**中能夠更清楚地表達我的意圖意味著更高興、更高效。

理由6:《c++11新特性之 static assertions 和constructor delegation》

c++ 11提供了一種方法來檢查先決條件並盡早的在可能的時機捕獲錯誤-編譯過程

這是通過靜態斷言(static_assert)和類別屬性模版實現的。這種方法的另乙個好處是,它不需要占用任何的執行時開銷,沒有什麼效能損失!

開始使用C 11的9個理由

如果你的 工作正常並且表現良好,你可能會想知道為什麼還要使用c 11。當然了,使用用最新的技術感覺很好,但是事實上它是否值得呢?在我看來,答案毫無疑問是肯定的。我在下面給出了9個理由,它們分為兩類 效能優勢和開發效率。獲得效能優勢 理由1 move語義 move semantics 簡單的說,它是優...

轉 9 個開始使用 C 11 的理由

如果你的 工作正常並且表現良好,你可能會想知道為什麼還要使用c 11。當然了,使用用最新的技術感覺很好,但是事實上它是否值得呢?在我看來,答案毫無疑問是肯定的。我在下面給出了9個理由,它們分為兩類 效能優勢和開發效率。獲得效能優勢 理由1 move語義 move semantics 簡單的說,它是優...

C 建構函式的幾個難點(基於C 11)

快要有乙個月沒有更新部落格了,是時候再動一動筆啦!因為最近在學習c 在學習過程中看了好多書,也在實際訓練中遇到了一些問題。所以在接下來的時間裡,應該會對c 裡自己遇到的一些難點寫幾篇專題,就當是為自己梳理鞏固知識啦!我們都知道所謂建構函式就是類用來初始化各個資料成員的 非靜態 如果成員都沒初始化好,...