天天看點

NDK14_C++基礎:部分C++11、14特性nullptr類型推導基于範圍的 for 循環Lambda

NDK開發彙總

文章目錄

  • nullptr
  • 類型推導
  • 基于範圍的 for 循環
  • Lambda

nullptr

nullptr 出現的目的是為了替代 NULL。 C++11之前直接将NULL定義為 0。
void test(int* i){
    
}
void test(int i){
    
}
//現在調用哪一個test? test(int)
test(NULL);
//調用test(int* i)
test(nullptr); 
           

類型推導

C++11 重新定義了auto 和 decltype 這兩個關鍵字實作了類型推導,讓編譯器來操心變量的類型。
auto i = 5;             // i 被推導為 int
auto p = new auto(10) // arr 被推導為 int *
//但是auto不能作用在數組上
auto arr1[10] = { 0 }; //錯誤
auto arr2= {0}; //正确
typeid(arr2).name() //獲得類型名為 initializer_list(後續介紹)
// int  j
decltype(i) j = 10;
           

基于範圍的 for 循環

實際上就是foreach
vector<int> vec = { 1,2,3,4,5 };
//配合auto使用
for(auto i : vec)
{
	cout << i << endl;
}
           

Lambda

匿名函數,即沒有函數名的函數

完整形式:

[捕獲外部變量清單 ] (參數清單) mutable exception->傳回類型 { 函數體 }

mutable:在外部變量清單以值來捕獲時,無法修改變量的值,加上mutable表示可修改(不會影響外部變量)

auto i = 5;
// [&] 表示外部變量都以引用的形式在lambda中使用,函數内部修改i的值會影響外部
// 這裡的 -> auto 自動推導在c++11不支援,c++14中對auto進行了擴充
thread t1([&] () -> auto {
	i = 100;
	cout << "線程:" << i  << endl;
});
_sleep(10);
cout << i << endl;
           
捕獲形式 說明
[] 不捕獲任何外部變量
[i, …] 以值得形式捕獲指定的多個外部變量(用逗号分隔);如果引用捕獲,需要顯示聲明&
[this] 以值的形式捕獲this指針
[=] 以值的形式捕獲所有外部變量
[&] 以引用形式捕獲所有外部變量
[=, &x] 變量x以引用形式捕獲,其餘變量以傳值形式捕獲
[&, x] 變量x以值的形式捕獲,其餘變量以引用形式捕獲

繼續閱讀