恢復內容開始 C++11 新特性 借鑒於 https://www.cnblogs.com/feng-sc/p/5710724.html C++ 2011/2014 統稱 C++2.0 1.auto關鍵字 auto這個關鍵字,是一個自動檢測類型的關鍵字,當類型很複雜時,無法確定變數/參數類型時,可以使 ...
---恢復內容開始---
C++11 新特性 借鑒於 https://www.cnblogs.com/feng-sc/p/5710724.html
C++ 2011/2014 統稱 C++2.0
1.auto關鍵字
auto這個關鍵字,是一個自動檢測類型的關鍵字,當類型很複雜時,無法確定變數/參數類型時,可以使用該auto關鍵字
2.NULL 和 nullptr 區別
就是指在C++2.0之前定義的NULL 的定義是 #define NULL 0 這是他的原型,實際使用的時候實際時傳入的確是NULL,而類型缺是指針
而nullptr的引入會減少NULL調用錯誤
class Test { public: void TestWork(int index) { std::cout << "TestWork 1" << std::endl; } void TestWork(int * index) { std::cout << "TestWork 2" << std::endl; } }; int main() { Test test; test.TestWork(NULL); test.TestWork(nullptr); }
3. for 迴圈
C++ 11 中增加了auto,還加強了for迴圈,並還引入了for each語句
第一種for:
int main() { int numbers[] = { 1,2,3,4,5 }; std::cout << "numbers:" << std::endl; for (auto number : numbers) { std::cout << number << std::endl; } }
第二種for each:
#include <array> #include <iostream> #define __TEXT int main() { #ifdef __TEXT //c++11 code std::array<int, 4> arraydemo = { 1,2,3,4 }; std::cout << "arraydemo:" << std::endl; for each(auto itor in arraydemo) { std::cout << itor << std::endl; } int arraydemosize = sizeof(arraydemo); std::cout << "arraydemo size:" << arraydemosize << std::endl; #endif #ifndef _ARRAY__ int nums[] = {1,2,3,4,5,6}; for each(auto num in nums) { std::cout << num << std::endl; } #endif getchar(); return 0; }
4.STL 容器補充
5.Thread ---引入boost::thread庫 (頭文件<thread>)
——>thread:
——>atomic 類型:
——>condition_variable:
6.std::function std::bind (頭文件functional)
由Boost庫引用而來,可以與lambda表達式混合使用
void Add(std::function<int(int, int)> fun, int a, int b) { int sum = fun(a, b); std::cout << "sum:" << sum << std::endl; } function<int(int,int)>
function是對函數指針的一個封裝 typedef 類型 (*Funciton)(參數表) bind(函數指針,對象指針,參數占位表)
7.Lambda表達式
int main() { auto add= [](int a, int b)->int{ return a + b; }; int ret = add(1,2); std::cout << "ret:" << ret << std::endl; return 0; }
解釋:
第3至5行為lamda表達式的定義部分
[]:中括弧用於控制main函數與內,lamda表達式之前的變數在lamda表達式中的訪問形式;
(int a,int b):為函數的形參
->int:lamda表達式函數的返回值定義
{}:大括弧內為lamda表達式的函數體。
8.auto_ptr、shared_ptr、weak_ptr(頭文件<memory>)
——>shared_ptr std::shared_ptr包裝了new操作符動態分別的記憶體,可以自由拷貝複製,基本上是使用最多的一個智能指針類型。
使用 : std::shared_ptr<Test> p1 = std::make_shared<Test>();
---恢復內容結束---