C++11新特性介紹了一段時間,至今為止也差不多了。是要總結的時候了:?
你可能會問我,為什么需要C++11呢,我這就給出理由:
**理由1**:《[C++11新特性之 Move semantics(移動語義)](http://blog.csdn.net/wangshubo1989/article/details/49748703 "move")》?
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新特性](http://blog.csdn.net/wangshubo1989/article/details/48490035 "auto")》?
auto關鍵字可以自動推斷類型,所以下面的代碼:
~~~
vector<vector<MyType>>::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; });?
}
**理由3:**新的智能指針(smart pointer)替換了有問題的auto_ptr,你可以不用擔心內存的釋放并移除相關釋放內存的代碼了。這讓代碼更清晰,并杜絕了內存泄露和查找內存泄露的時間。
**理由4**:《[C++11新特性之std::function](http://blog.csdn.net/wangshubo1989/article/details/49134235 "function")》把方法作為first class object是一個非常強大的特性,這讓你的代碼變得更靈活和通用了。C++的std::function提供了這方面的功能。方法提供一種包裝和傳遞任何可調用的東西-函數指針, 仿函數(functor), lambda表達式等。
**理由5**:《[c++11特性之override和final關鍵字](http://blog.csdn.net/wangshubo1989/article/details/49539251 "final override")》還有許多其它小的功能,如override、final關鍵字和nullptr讓你的代碼意圖更明確。對我來說,減少視覺混亂和代碼中能夠更清楚地表達我的意圖意味著更高興、更高效。
**理由6**:《[C++11新特性之 Static assertions 和constructor delegation](http://blog.csdn.net/wangshubo1989/article/details/49786813 "static assertion")》?
C++ 11提供了一種方法來檢查先決條件并盡早的在可能的時機捕獲錯誤-編譯過程?
這是通過靜態斷言(static_assert)和類別屬性模版實現的。這種方法的另一個好處是,它不需要占用任何的運行時開銷,沒有什么性能損失!
- 前言
- 吐血整理C++11新特性
- C++11新特性之std::function
- c++11特性之正則表達式
- c++11特性之Lambda表達式
- c++11特性之override和final關鍵字
- c++11特性之std::thread--初識
- c++11特性之std::thread--初識二
- c++11特性之initializer_list
- c++11特性之std::thread--進階
- c++11特性之std::thread--進階二
- C++11新特性之 CALLBACKS
- C++11新特性之 std::array container
- C++11新特性之 nullptr
- C++11新特性之 rvalue Reference(右值引用)
- C++11新特性之 Move semantics(移動語義)
- C++11新特性之 default and delete specifiers
- C++11新特性之 Static assertions 和constructor delegation
- 開始使用C++11的幾個理由
- C++11新特性之 std::future and std::async