c 11 移動語義

2021-09-07 20:02:10 字數 612 閱讀 3103

c++ 已經擁有了拷貝建構函式, 和賦值函式,它們主要定位為淺和深度拷貝, 新增加乙個移動建構函式,主要避免拷貝構造。

在定義了移動建構函式的情況下,在實參(argument)是乙個右值(rvalue,包括xvalue和prvalue)的情況下會呼叫移動建構函式,而不是呼叫複製建構函式 

可以使用std::move語句可以將左值變為右值而避免拷貝構造,修改**如下:

編譯器會對返回值進行優化,簡稱rvo,是編譯器的一項優化技術,它涉及(功能是)消除為儲存函式返回值而建立的臨時物件。

-fno-elide-constructors,此選項作用是,在 g++ 上編譯時關閉 rvo。

c 11 移動語義

右值是相對於左值而言的。簡單來說,在等號左邊的叫做左值,等號右邊的叫做右值。再具體點說,左值是值能夠取位址的值,比如我們定義的變數這些都是能夠賦值並且能夠取位址的。而右值是不能夠取位址的,比如常量 hello 或者乙個臨時變數。在c 11之前我們如何實用右值呢?通常是使用常引用,const type...

移動語義和右值引用(C 11)

左值 可以取位址 有名字的 右值 不能取位址 沒名字的 傳統的c 引用稱為左值引用,使得標誌符關聯到左值。c 11新增了右值引用,使用 表示。引入右值引用的主要目的之一是實現移動語義。在複製物件時,實現物件的移動而非拷貝。通過移動建構函式 移動賦值運算子實現 函式的引數為右值引用,函式內部並非深度複...

C 11 右值引用和移動語義

因為工作室要求寫技術部落格記錄學習到的知識點,自己之前是沒有寫過部落格的,所以現在用一篇介紹右值引用和移動語義的部落格作為部落格的第一篇,可能對於移動語義的理解還不夠深刻,但可以作為乙個簡單的介紹部落格 要理解好右值引用首先要知道什麼是左值?什麼是右值?1.左值是表示式結束後依然存在的持久化物件 2...