欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++第11版本中的一些強大的新特性小結

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

Auto Type Deduction 自動類型推導

auto 關鍵字讓用戶得以使用 C++ 內置的類型推導特性。

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

Auto 關鍵字會對上述自變量(something)進行自動推導,得出其應該是 string 類型的結論,并在 auto 出現(xiàn)的地方用正確的類型進行替換。這個特性對迭代器特別有用。

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();
}

贊! 代碼看上去簡潔多了!

Strongly Typed Enums 強類型枚舉

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

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

Lambdas 表達式

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

[]() { }

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

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

Capture List 捕獲列表

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

一個值:[x]
一個引用 [&x]
當前范圍內任意變量的引用 [&]
同3,但是通過變量的值
你可以對上面的各項進行任意混合,只要用逗號隔開即可 [x, &y]

Argument List 參數列表

參數列表和 C++ 函數的參數列表是一個概念。

Function Body 函數體

函數體是指在 Lambda 表達式被調用時真正執(zhí)行的代碼。

Return Type Deduction

返回值推斷

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

可變 Labmda

如果一個 Lambda 表達式被標記為 mutable(例如:[]() mutable{ }),那么對于按值捕獲的數值來說,在函數體內就允許對這些值進行修改操作。

下面舉個例子:

int main()
{
  char s[]="Hello World!";
  int Uppercase = 0; 
//lambda會改變這個變量的值
  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 關鍵字定義了一個對象,那么下列事件只要發(fā)生一個,對象就會被銷毀并釋放內存:

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

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

YourObject * obj = new YourObject();

然后在程序的最后你一定要記得釋放內存:

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

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

當 obj 跳出作用域范圍之外的時候,內存將會被自動回收。

static_assert

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

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

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

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

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

POD 是指“簡單數據”(Plain Old Data)結構,也就是說,它是一個的類(你可以用struct關鍵字定義,也可以用class關鍵字定義),但沒有構造函數,析構函數和虛成員函數。所以,如果一個愚蠢的菜鳥程序員企圖給這種類型增加構造函數的話,static_assert 就會在編譯的時候阻止這種行為,并報錯。這對代碼維護來說可是非常有用的。

相關文章

  • QT實現(xiàn)多文件拖拽獲取路徑的方法

    QT實現(xiàn)多文件拖拽獲取路徑的方法

    這篇文章主要為大家詳細介紹了QT實現(xiàn)多文件拖拽獲取路徑的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實現(xiàn)LeetCode(84.直方圖中最大的矩形)

    C++實現(xiàn)LeetCode(84.直方圖中最大的矩形)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(84.直方圖中最大的矩形),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++ SOCKET多線程實現(xiàn)聊天小程序

    C++ SOCKET多線程實現(xiàn)聊天小程序

    這篇文章主要為大家詳細介紹了C++ SOCKET多線程實現(xiàn)聊天小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++結構體與類指針知識點總結

    C++結構體與類指針知識點總結

    在本篇文章里小編給大家整理了關于C++結構體與類指針知識點以及相關內容,有興趣的朋友們參考學習下。
    2019-09-09
  • 關于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    關于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法

    這篇文章主要介紹了PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • OpenCV 顏色追蹤的示例代碼

    OpenCV 顏色追蹤的示例代碼

    這篇文章主要介紹了OpenCV 顏色追蹤的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • C++生成格式化的標準字符串實例代碼

    C++生成格式化的標準字符串實例代碼

    這篇文章主要給大家介紹了關于C++生成格式化的標準字符串的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • C++ 中 socket編程實例詳解

    C++ 中 socket編程實例詳解

    這篇文章主要介紹了C++ 中 socket編程實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • C語言中的指針新手初階指南

    C語言中的指針新手初階指南

    指針是C語言的靈魂,精華之所在,指針強大而危險,用得好是一大利器,用得不好是一大潛在危害,下面這篇文章主要給大家介紹了C語言中指針的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • C語言實現(xiàn)學生消費管理系統(tǒng)

    C語言實現(xiàn)學生消費管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生消費管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論