国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 編程設計 > 正文

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

2020-06-27 15:41:45
字體:
來源:轉載
供稿:網友
如果你的代碼工作正常并且表現(xiàn)良好,你可能會想知道為什么還要使用C++ 11。當然了,使用用最新的技術感覺很好,但是事實上它是否值得呢?在我看來,答案毫無疑問是肯定的。我在下面給出了9個理由,它們分為兩類:性能優(yōu)勢和開發(fā)效率。
獲得性能優(yōu)勢
理由1:move語義(move semantics)。簡單的說,它是優(yōu)化復制的一種方式。有時候復制很顯然是浪費的。如果你從一個臨時的string對象復制內容,簡單的復制指針到字符緩沖區(qū)將比創(chuàng)建一個新的緩沖區(qū)再復制要高效得多。他之所以能工作是因為源對象超出了范圍。
然而,在這以前C++并沒有判斷源對象是不是臨時對象的機制。move語義通過除了復制操作外還允許你有一個move構造函數(shù)(move constructor)和一個move賦值運算(move assignment)符來提供這個機制。
你知道嗎?當你在Visual Studio 2010中使用標準庫中的類如string或vector時,它們已經支持move語義了。這可以防止不必要的的復制從而改善性能。
通過在你的類中實現(xiàn)move語義你可以獲得額外的性能提升,比如當你把它們存儲到STL容器中時。還有,move語義不僅可以應用到構造函數(shù),還可以應用到方法(如vector的push_back方法)。
理由2:通過使用類別屬性(type traits,如is_floating_point)和模板元編程(template metaprogramming,如enable_if template),你可以為某些特定的類型定制模版,這可以實現(xiàn)優(yōu)化。
理由3:哈希表現(xiàn)在已經是標準實現(xiàn)的了,它提供更快速的插入、刪除和查找,這在處理大量數(shù)據時很有用。你現(xiàn)在可以隨便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset這幾種數(shù)據結構了。
提高效率
提高效率不僅都是在代碼性能方面,開發(fā)時間也是寶貴的。C++ 11可以讓你的代碼更短、更清晰、和更易于閱讀,這可以讓你的效率更高。
理由4:auto關鍵字可以自動推斷類型,所以下面的代碼:
vector<vector<MyType>>::const_iterator it = v.begin()現(xiàn)在可以很簡單的寫成:
auto it = v.cbegin()盡管有些人會說,它隱藏了類型信息,在我看來它利大于弊,因為它減少了視覺混換并展示了代碼的行為,還有它可以讓你我少打很多字!
理由5:Lambda表達式提供了一種方法來定義匿名方法對象(實際上是閉包),這是代碼更加線性和有規(guī)律可循。這在和STL算法結合使用時很方便:
bool is_fuel_level_safe()
{
return all_of(_tanks.begin(), _tanks.end(),
[this](Tank& t) { return t.fuel_level() > _min_fuel_level; });
}
理由6:新的智能指針(smart pointer)替換了有問題的auto_ptr,你可以不用擔心內存的釋放并移除相關釋放內存的代碼了。這讓代碼更清晰,并杜絕了內存泄露和查找內存泄露的時間。
理由7:把方法作為first class object是一個非常強大的特性,這讓你的代碼變得更靈活和通用了。C++的std::function提供了這方面的功能。方法提供一種包裝和傳遞任何可調用的東西-函數(shù)指針, 仿函數(shù)(functor), lambda表達式等。
理由8:還有許多其它小的功能,如override、final關鍵字和nullptr讓你的代碼意圖更明確。對我來說,減少視覺混亂和代碼中能夠更清楚地表達我的意圖意味著更高興、更高效。
另一個開發(fā)效率的方面是錯誤檢測。如果你的錯誤在運行時發(fā)生,這意味著你至少需要運行軟件,并可能得通過一系列步驟來重現(xiàn)錯誤,這需要時間。
C++ 11提供了一種方法來檢查先決條件并盡早的在可能的時機捕獲錯誤-編譯過程中,在你運行代碼前。這就是理由9
這是通過靜態(tài)斷言(static_assert)和類別屬性模版實現(xiàn)的。這種方法的另一個好處是,它不需要占用任何的運行時開銷,沒有什么性能損失!
現(xiàn)在開始掌握C++ 11
在C++ 11標準中除了上描述的還有更多的改動和新功能,它需要一整本數(shù)來描述。不過,我相信它們是值得你花時間去學習的。你將省去以往花在提高效率上的時間。很多主流的編譯器已經開始支持C++ 11的一些標準了。還等什么?開始吧!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 密山市| 彭阳县| 越西县| 饶阳县| 安阳县| 萝北县| 山东| 米脂县| 大名县| 弥渡县| 龙山县| 沐川县| 崇信县| 曲阳县| 吉林省| 柳河县| 贵定县| 丹巴县| 九龙县| 无极县| 五指山市| 田阳县| 金坛市| 哈尔滨市| 乌鲁木齐县| 改则县| 太湖县| 珠海市| 兴山县| 贞丰县| 英吉沙县| 烟台市| 内乡县| 蓬溪县| 灵川县| 樟树市| 垣曲县| 唐山市| 赤城县| 澜沧| 德惠市|