最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++第11版本中的一些強(qiáng)大的新特性小結(jié)

 更新時(shí)間:2015年12月11日 16:32:33   作者:Kernel Panic  
這篇文章主要介紹了C++第11版本中的一些強(qiáng)大的新特性小結(jié),需要的朋友可以參考下

Auto Type Deduction 自動(dòng)類型推導(dǎo)

auto 關(guān)鍵字讓用戶得以使用 C++ 內(nèi)置的類型推導(dǎo)特性。

std::string something = somethingthatreturnsastring.getString();
auto something = somethingthatreturnsastring.getString();

Auto 關(guān)鍵字會(huì)對(duì)上述自變量(something)進(jìn)行自動(dòng)推導(dǎo),得出其應(yīng)該是 string 類型的結(jié)論,并在 auto 出現(xiàn)的地方用正確的類型進(jìn)行替換。這個(gè)特性對(duì)迭代器特別有用。

for(std::vector<T>::iterator it = x.begin(); it != x.end(); i++)
{
  it->something();
}

上述代碼可以寫成:

for(auto it = x.begin(); it != x.end(); i++)
{
  it->something();
}

贊! 代碼看上去簡(jiǎn)潔多了!

Strongly Typed Enums 強(qiáng)類型枚舉

這個(gè)特性可以有效避免枚舉類型的命名沖突,從而消除很多潛在的 bug。在舊版本的 C++ 中,程序員必須為每一個(gè)枚舉項(xiàng)設(shè)定一個(gè)全局唯一的名字。例如,如果你給一個(gè)枚舉項(xiàng)取名叫 None,那么其他的枚舉集合就不能再用這個(gè)名字了。但是現(xiàn)在,你可以這么做了!(譯注:作者下面給的例子仿佛和上面的文字不是非常搭配//myEnum ::All 和 myEnum::All是不是存在差異?)

enum class myEnum {None, One, All};
myEnum o = myEnum ::All;
auto p = myEnum::All; 
// 同樣有效

Lambdas 表達(dá)式

Lambda 表達(dá)式簡(jiǎn)單說就是個(gè)匿名函數(shù)(譯注:原文為in-place function,意思是“用來鑲嵌的函數(shù)”,但是匿名函數(shù)能更精確表達(dá)這個(gè)含義)。對(duì)于迭代器以及for 循環(huán)非常有用,這種函數(shù)你只需要在程序的某一處使用一次,所以沒有必要專門在程序里明確定義它。Lambda 表達(dá)式并沒有讓 C++ 在邏輯表達(dá)上做到“及以往之不可及”的程度,它是一種受函數(shù)式編程思想影響而引入的語言特性,能夠讓程序更緊湊。Lambda 表達(dá)式的最簡(jiǎn)形式是下面這樣的:

[]() { }

加上所有可能的操作符,會(huì)是這樣:

[]() mutable -> T { }
其中[]是捕獲列表,()是參數(shù)列表,{}是函數(shù)體

Capture List 捕獲列表

捕獲列表定義了什么類型的東西可以從 Lambda 表達(dá)式之外匹配到函數(shù)體中來??梢园韵逻@些:

一個(gè)值:[x]
一個(gè)引用 [&x]
當(dāng)前范圍內(nèi)任意變量的引用 [&]
同3,但是通過變量的值
你可以對(duì)上面的各項(xiàng)進(jìn)行任意混合,只要用逗號(hào)隔開即可 [x, &y]

Argument List 參數(shù)列表

參數(shù)列表和 C++ 函數(shù)的參數(shù)列表是一個(gè)概念。

Function Body 函數(shù)體

函數(shù)體是指在 Lambda 表達(dá)式被調(diào)用時(shí)真正執(zhí)行的代碼。

Return Type Deduction

返回值推斷

如果 Lambda 表達(dá)式只有一個(gè)返回聲明,那么返回值類型就可以省略,其類型就是隱式類型:decltype(return_statement)

可變 Labmda

如果一個(gè) Lambda 表達(dá)式被標(biāo)記為 mutable(例如:[]() mutable{ }),那么對(duì)于按值捕獲的數(shù)值來說,在函數(shù)體內(nèi)就允許對(duì)這些值進(jìn)行修改操作。

下面舉個(gè)例子:

int main()
{
  char s[]="Hello World!";
  int Uppercase = 0; 
//lambda會(huì)改變這個(gè)變量的值
  for_each(s, s+sizeof(s), [&Uppercase] (char c) {
  if (isupper(c))
   Uppercase++;
  });
 cout<< Uppercase<<" uppercase letters in: "<< s<<endl;
}

Unique 指針

Unique 指針是 C++11 版本的智能指針類。

一旦你用 unique_ptr 關(guān)鍵字定義了一個(gè)對(duì)象,那么下列事件只要發(fā)生一個(gè),對(duì)象就會(huì)被銷毀并釋放內(nèi)存:

unique_ptr 管理的對(duì)象被銷毀。
unique_ptr 管理的對(duì)象通過賦值操作符指向另一個(gè)指針,或調(diào)用了reset()方法。
對(duì)于不想了解太多細(xì)節(jié)的用戶來說,這就意味著如果你使用了 unique 指針的語義,那么在跳出作用域之前,你就不用手動(dòng)回收對(duì)象的內(nèi)存了。

以前,我們需要這么寫代碼:

YourObject * obj = new YourObject();

然后在程序的最后你一定要記得釋放內(nèi)存:

delete(obj);
否則你可就造成內(nèi)存泄露了。而現(xiàn)在,

std::unique_ptr<YourObject> obj(new YourObject());

當(dāng) obj 跳出作用域范圍之外的時(shí)候,內(nèi)存將會(huì)被自動(dòng)回收。

static_assert

static_assert 簡(jiǎn)單說就是一個(gè)在編譯期執(zhí)行的斷言。例如,你可以這么做:

static_assert(sizeof(unsigned int) * CHAR_BIT == 32);

假設(shè)由于系統(tǒng)的原因造成了上述的邏輯判斷的失敗,那么 static_assert 就會(huì)斷言失敗。

它的另一種用途,是和 C++ 特征類型搭配使用。比如:

static_assert(std::is_pod<yourstruct>::value, "Not a pod struct!");

POD 是指“簡(jiǎn)單數(shù)據(jù)”(Plain Old Data)結(jié)構(gòu),也就是說,它是一個(gè)的類(你可以用struct關(guān)鍵字定義,也可以用class關(guān)鍵字定義),但沒有構(gòu)造函數(shù),析構(gòu)函數(shù)和虛成員函數(shù)。所以,如果一個(gè)愚蠢的菜鳥程序員企圖給這種類型增加構(gòu)造函數(shù)的話,static_assert 就會(huì)在編譯的時(shí)候阻止這種行為,并報(bào)錯(cuò)。這對(duì)代碼維護(hù)來說可是非常有用的。

相關(guān)文章

  • C++ Boost Array與Unordered使用介紹

    C++ Boost Array與Unordered使用介紹

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • 使用C語言編寫一個(gè)關(guān)機(jī)惡搞小程序

    使用C語言編寫一個(gè)關(guān)機(jī)惡搞小程序

    system函數(shù)的參數(shù)是"shutdown"時(shí),它將會(huì)執(zhí)行系統(tǒng)的關(guān)機(jī)命令,所以本文將利用這一特點(diǎn)制作一個(gè)關(guān)機(jī)惡搞小程序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • c++中的字節(jié)序與符號(hào)位的問題

    c++中的字節(jié)序與符號(hào)位的問題

    這篇文章主要介紹了c++中的字節(jié)序與符號(hào)位的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C/C++內(nèi)存管理基礎(chǔ)與面試

    C/C++內(nèi)存管理基礎(chǔ)與面試

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來看看吧
    2022-07-07
  • C語言魔方陣的三種實(shí)現(xiàn)方法

    C語言魔方陣的三種實(shí)現(xiàn)方法

    大家好,本篇文章主要講的是C語言魔方陣的三種實(shí)現(xiàn)方法,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++11非受限聯(lián)合體的使用

    C++11非受限聯(lián)合體的使用

    本文主要介紹了C++11非受限聯(lián)合體的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C/C++實(shí)現(xiàn)segy文件的讀取詳解

    C/C++實(shí)現(xiàn)segy文件的讀取詳解

    SEGY是地震數(shù)據(jù)一般以地震道為單位進(jìn)行組織,采用SEG-Y文件格式存儲(chǔ)。標(biāo)準(zhǔn)SEGY文件一般包括三部分:卷頭、道頭與地震道數(shù)據(jù)。本文將介紹利用C++讀取segy文件的方法,感興趣的可以了解一下
    2022-03-03
  • C++如何實(shí)現(xiàn)BitMap數(shù)據(jù)結(jié)構(gòu)

    C++如何實(shí)現(xiàn)BitMap數(shù)據(jù)結(jié)構(gòu)

    這篇文章主要介紹了C++如何實(shí)現(xiàn)BitMap數(shù)據(jù)結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    TableDelegate自定義代理組件的主要作用是對(duì)原有表格進(jìn)行調(diào)整,本文主要介紹了QT中TableDelegate?自定義代理組件的使用教程,感興趣的朋友可以了解一下
    2021-12-12
  • C++中template方法undefined reference to的問題解決

    C++中template方法undefined reference to的問題解決

    Undefined reference to 錯(cuò)誤:這類錯(cuò)誤是在連接過程中出現(xiàn)的,本文就來介紹一下C++中template方法undefined reference to的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

临澧县| 峨边| 茌平县| 深泽县| 衡南县| 道孚县| 五指山市| 徐水县| 政和县| 芜湖市| 万宁市| 汶上县| 上林县| 若尔盖县| 屏东县| 望奎县| 清徐县| 崇信县| 沧州市| 会泽县| 宣威市| 天长市| 青田县| 民勤县| 常山县| 白河县| 聂拉木县| 通榆县| 城口县| 辽阳市| 新乐市| 吉木萨尔县| 敦化市| 拜泉县| 兴文县| 方山县| 远安县| 都兰县| 卢氏县| 凤阳县| 宾阳县|