歡迎來到合肥浪訊網(wǎng)絡(luò)科技有限公司官網(wǎng)
  咨詢服務(wù)熱線:400-099-8848

25個(gè)會讓你戀戀不忘的水平動彈網(wǎng)站設(shè)計(jì)

發(fā)布時(shí)間:2015-10-14 文章來源:  瀏覽次數(shù):2518
假如你的代碼工作正常并且表現(xiàn)良好,你可能會想知道為什么還要使用C++ 11。當(dāng)然了,使用用最新的技術(shù)感覺很好,但是事實(shí)上它是否值得呢?在我看來,謎底毫無疑問是肯定的。我在下面給出了9個(gè)理由,它們分為兩類:機(jī)能上風(fēng)和開發(fā)效率。
獲得機(jī)能上風(fēng)
理由1:move語義(move semantics)。簡樸的說,它是優(yōu)化復(fù)制的一種方式。有時(shí)候復(fù)制很顯然是鋪張的。假如你從一個(gè)臨時(shí)的string對象復(fù)制內(nèi)容,簡樸的復(fù)制指針到字符緩沖區(qū)將比創(chuàng)建一個(gè)新的緩沖區(qū)再復(fù)制要高效得多。他之所以能工作是由于源對象超出了范圍。
然而,在這以前C++并沒有判定源對象是不是臨時(shí)對象的機(jī)制。move語義通過除了復(fù)制操縱外還答應(yīng)你有一個(gè)move構(gòu)造函數(shù)(move constructor)和一個(gè)move賦值運(yùn)算(move assignment)符來提供這個(gè)機(jī)制。
你知道嗎?當(dāng)你在Visual Studio 2010中使用尺度庫中的類如string或vector時(shí),它們已經(jīng)支持move語義了。這可以防止不必要的的復(fù)制從而改善機(jī)能。
通過在你的類中實(shí)現(xiàn)move語義你可以獲得額外的機(jī)能晉升,好比當(dāng)你把它們存儲到STL容器中時(shí)。還有,move語義不僅可以應(yīng)用到構(gòu)造函數(shù),還可以應(yīng)用到方法(如vector的push_back方法)。
理由2:通過使用種別屬性(type traits,如is_floating_point)和模板元編程(template metaprogramming,如enable_if template),你可認(rèn)為某些特定的類型定制模版,這可以實(shí)現(xiàn)優(yōu)化。
理由3:哈希表現(xiàn)在已經(jīng)是尺度實(shí)現(xiàn)的了,它提供更快速的插入、刪除和查找,這在處理大量數(shù)據(jù)時(shí)很有用。你現(xiàn)在可以隨便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset這幾種數(shù)據(jù)結(jié)構(gòu)了。
進(jìn)步效率
進(jìn)步效率不僅都是在代碼機(jī)能方面,開發(fā)時(shí)間也是寶貴的。C++ 11可以讓你的代碼更短、更清楚、和更易于閱讀,這可以讓你的效率更高。
理由4:auto樞紐字可以自動推斷類型,所以下面的代碼:
vector<vector<MyType>>::const_iterator it = v.begin()
現(xiàn)在可以很簡樸的寫成:
auto it = v.cbegin()
盡管有些人會說,它躲藏了類型信息,在我看來它利大于弊,由于它減少了視覺混換并展示了代碼的行為,還有它可以讓你我少打良多字!
理由5:Lambda表達(dá)式提供了一種方法來定義匿名方法對象(實(shí)際上是閉包),這是代碼更加線性和有規(guī)律可循。這在和STL算法結(jié)合使用時(shí)很利便:
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,你可以不用擔(dān)心內(nèi)存的開釋并移除相關(guān)開釋內(nèi)存的代碼了。這讓代碼更清楚,并杜絕了內(nèi)存泄露和查找內(nèi)存泄露的時(shí)間。
理由7:把方法作為first class object是一個(gè)非常強(qiáng)盛的特性,這讓你的代碼變得更靈活和通用了。C++的std::function提供了這方面的功能。方法提供一種包裝和傳遞任何可調(diào)用的東西-函數(shù)指針, 仿函數(shù)(functor), lambda表達(dá)式等。
理由8:還有很多其它小的功能,如override、final樞紐字和nullptr讓你的代碼意圖更明確。對我來說,減少視覺混亂和代碼中能夠更清晰地表達(dá)我的意圖意味著更興奮、更高效。
另一個(gè)開發(fā)效率的方面是錯(cuò)誤檢測。假如你的錯(cuò)誤在運(yùn)行時(shí)發(fā)生,這意味著你至少需要運(yùn)行軟件,并可能得通過一系列步驟來重現(xiàn)錯(cuò)誤,這需要時(shí)間。
C++ 11提供了一種方法來檢查先決前提并盡早的在可能的時(shí)機(jī)捕捉錯(cuò)誤-編譯過程中,在你運(yùn)行代碼前。這就是理由9。
這是通過靜態(tài)斷言(static_assert)和種別屬性模版實(shí)現(xiàn)的。這種方法的另一個(gè)好處是,它不需要占用任何的運(yùn)行時(shí)開銷,沒有什么機(jī)能損失!
現(xiàn)在開始把握C++ 11
在C++ 11尺度中除了上描述的還有更多的改動和新功能,它需要一整本數(shù)來描述。不外,我相信它們是值得你花時(shí)間去學(xué)習(xí)的。你將省去以往花在進(jìn)步效率上的時(shí)間。良多主流的編譯器已經(jīng)開始支持C++ 11的一些尺度了。還等什么?開始吧!
注:良多名詞覺得翻譯成了中文還不如看英文來的愜意,翻譯成了中文的后面括號里備注了原英文單詞。

上一條:網(wǎng)站優(yōu)化排名網(wǎng)站建設(shè)不要...

下一條:網(wǎng)站制作要留意的色彩方面...