統一列表初始化:
構造函數的函數名與函數體之間增加一個列表,用于對成員初始化
在實例化對象時,支持單/多參數的隱式轉化,同時也可以省略=符號,讓代碼更簡潔?
右值的引用?
左值:
- 左值與右值的重要區別就是能否取地址,左值可以取地址,右值不能取地址(這并不帶表右值沒有地址)
- 左值,右值的底層都是指針
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- 左值不一定是一個值,也有可能是一個表達式
- 在函數中,左值引用作為返回值,返回函數中的局部對象不可取,會返回一個野引用
右值:
- &&能給右值取別名
- 左值引用&不能給右值取別名,但加了const修飾可以
- 右值的引用本身是左值
- 函數調用返回的值,表達式返回的值等都叫右值
string("11111"); func1(2);//函數調用,func1返回一個Int int x,y=1; x+y;
純右值&將亡值
- 純右值是內置類型
- 將亡值是自定義類型
萬能引用
完美轉發forward:
在模板中,接受左值,就轉化為左值,接受右值就轉化為右值
移動構造和移動賦值
- 在函數調用中,參數使用右值引用可以在函數調用結束后,轉移資源,相比于傳統的寫法來講,降低了代價,傳統寫法,函數調用結束后,會有一個拷貝構造和一個賦值拷貝,但右值引用直接解決了這一問題,只需要把資源轉移即可。
- 舉例:人在快要失去生命時,會選擇留下自己的器官造福別人,這里轉移了將亡的人的器官資源,道理與右值引用的類似
- 移動構造和移動賦值針對的是深拷貝的自定義類型對象。
lambda?
- 參數列表可省略,返回值可省略
- lambda就算內容一模一樣,類型也是不一樣的。lambda的底層是由仿函數實現的
- lambda的捕捉列表
- 傳值捕捉
- 傳引用捕捉
- 混合捕捉