天天看點

C++ 11 新特性C++ 11  新特性

類内資料成員允許賦預設值。

c11以前是會報錯的。iso c++ forbids initialization of member `name_var_'

lambda表達式本質上是一個未命名的内聯函數。

很多語言都提供了 lambda 表達式,如 python,java 8。lambda 表達式可以友善地構造匿名函數,如果你的代碼裡面存在大量的小函數,而這些函數一般隻被調用一次,那麼不妨将他們重構成 lambda 表達式,簡化程式設計。

lambda 格式:[capture list](parameter list)->return type {function body}

我們可以忽略參數清單和傳回類型,但必須永遠包含捕獲清單和函數體。

regex

c98中,通過rand()函數生成随機數。c 11使用 default_random_engine 類 和 相應的分布類。

cpp中,動态記憶體的管理是通過new、delete這一對操作實作的。delete操作的時機很難正确的把握,是以c11引入了智能指針,smart pointer,本質是模闆類。

shared_ptr允許多個指針指向同一個對象。

unique_ptr獨占所指的對象。

最安全的配置設定和使用動态記憶體的方法是調用make_shared庫函數,它負責在堆中申請動态對象并傳回智能指針。

每個智能指針都自動的維護着一個引用計數,若減為0,則自動調用對象的析構函數釋放記憶體,不需程式員進行delete操作。當指向一個對象的最後一個shared_ptr銷毀時,該對象也會被銷毀。

shared/unique _ptr二者都支援的操作

shared_ptr<t> p或 unique_ptr<t> p

空智能指針,可以指向類型為t的對象

p

若p指向一個對象,p為true,可用于if(p)判斷

*p

解引用p,獲得它指向的對象,類似普通指針

p->member_object

等價于(*p).member_object

p.get()

傳回p中儲存的指針。要小心使用,若智能指針釋放了對象,傳回的指針所指的對象就也消失了

shared_ptr 獨有的操作

make_shared<t>(args)

根據args參數建立t類型動态對象,然後傳回shared_ptr 對象

shared_ptr<t> p(q)

p是q的拷貝;此操作會遞增q中的計數器。初始化要求類型相容。

p=q

p的引用計數減一,q的引用計數加一

p.use_count()

傳回與p共享對象的智能指針數量

p.unique()

若p.use_count()為1,傳回true,否則是false。

更簡單的for語句,用于周遊序列或容器的元素,并執行特定操作。

文法為  for(declaration:expression) statement  即for(變量:序列) 語句

c11允許使用大括号括起來的初始值清單給對象指派。

 vector<int> v;v={1,1,2};

這在c11以前是錯誤的。

隻是新特性,不涉及關鍵字。委托構造函數使用所在類的其他構造函數,來完成初始化過程。優點就是少敲鍵盤。

數值類型轉string

string to_string (int val);//long、float、unsigned int 等資料類型的重載也都有。

string轉數值類型

int stoi (const string&  str, size_t* idx = 0, int base = 10);

unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);

類似的,還有stod double、stof float、stoi int、stol long、。。。

繼續閱讀