程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++:0x/11學習筆記

C++:0x/11學習筆記

編輯:C++入門知識

今天在看微軟提供的windows8的相關開發文檔和Sample程序,發現有個C++程序的表達方式完全象天書,查了下,原來是C++0x/11新支持的Lambda表達式,本來一直懶得去看C++0x/11的說明,想等用到再去研究,今天趁這個機會稍微浏覽了下,大概整理了如下這些新特性,跟大家分享一下。
稍微吐槽下,C++0x/11是繼C++ 03後通過的最新的C++標准庫,對C++語法特性和開發庫兩方面都有了新的擴展,說實在話,這個出的也太晚了,03年到11年,IT技術日新月異,而C++標准庫才更新了一版,真是C++開發者的悲哀。
閒話表過,進入正題。
1. Lambda表達式
你不學絕對看不懂的一個C++ 11新表達方式。大家可能知道Boost裡有Lambda這個庫,c++ 11的Lambda功能類似,也是提供匿名函數外加支持類似"閉包"機制。如果要問什麼是匿名函數,什麼是閉包,這裡就不解釋了,相信有點javascript基礎的都明白。
言歸正傳,C++ 11中Lambda表達式的標准形式是:
 [外部變量](參數)->返回值 {函數體}
其中““->返回值”部分可以省略,如果省略則會有返回值類型推導。(類型推導在後面auto中會進行說明)
關於外部變量的傳遞方式如下:

  [] 無任何外部變量 [x, &y] x以傳值方式導入,y以引用方式導入 [&] 所有變量都以引用方式導入 [=] 所有變量都以傳值方式導入 [&, x] 除x以傳值方式導入外,其他變量以引用方式導入 [=, &z] 除z以引用方式導入外,其他變量以傳值方式導入  
一個簡單的例子:
 

[cpp]
int first = 0; 
int second = 0; 
int third = 1; 
 
int result = [first, &second](int p)->int{ 
     //first++;  改變值傳遞的外部參數,編譯器會報錯 
     second++; 
     return first + second + p; 
}(third); 

結果:first = 0, second = 1, result = 2

2. 自動類型推導auto
不多解釋了,看下面這些結果就明白了。
[cpp]
auto x = 0;   // 因為0是int型,所以x為int類型, 
auto y = 3.14; // y 為double類型 

auto也可以讓代碼更簡單,比如:
[cpp]
vector<int>::const_iterator it = v.begin(); 
可以寫成:
[cpp]
auto it = v.begin(); 
但是濫用auto也會讓程序可讀性變差,比如:
[cpp]
auto obj = SomeFunction();     // 看不出函數到底返回了什麼類型 
而這樣用就沒有任何問題:
[cpp]
auto obj = new SomeObject(); 

3. 初始化語法
通過{}來進行初始化,有如下特性(以前C++是不支持的):
[cpp]
int* x = new int[2]{1, 2}; 
vector<int> v = {1, 2}; 

另外還支持java方式的初始化
[cpp]
class tempObj { 
public: 
     int x = 10; 
}; 

4. delete 和 default 函數
delete告訴編譯器不自動產生默認函數,default恰恰相反,它讓編譯器產生一個默認函數。比如以前C++的類一旦定義了構造函數,就不再支持默認構造函數,C++ 11可以通過default來實現。
[cpp]
class NewObj 

    NewObj() = default; // 使用默認構造函數 
    NewObj(int value); 
}; 

5. nullptr
避免了曾經NULL的缺陷,所以C++11裡,指針初始化都應該設為nullptr。

線程庫,智能指針等新功能,這裡就不說明了,基本概念都類似,使用的時候一查就明白了。

這裡省略n種新特性,等以後我看了再分享吧。


摘自 my_business的專欄
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved