c 的右值引用

2021-06-26 22:12:40 字數 820 閱讀 3194

關於右值引用,這個技術是用於處理臨時物件的析構問題。之前也考慮過臨時物件的析構問題。考慮這麼乙個問題。

class house

house(const house & h)

~house()

}house build(house h)

int main

編譯:g++-c house.cpp -std=c++11 -o a

最終會輸出幾次建構函式?

在呼叫build時,之前按照我的理解在build傳入引數時copy構造一次,返回後又copy構造一次。

相當與是這麼乙個過程

build(h)先生成hcopy,然後h copy再生成s(相當於s是hcopy copy),最後析構hcopy,這裡相當與

hcopy基本上沒有用處,相當於多了一次析構,多了一次析構,構造開銷,其實一般情況下大家完全可以

想到hcopy可以賦值給s。因為hcopy相當於是乙個臨時物件,也就是乙個右值!所以c++11提出解決方法如下:

class house

house(const house & h)

house(house&& h)

~house()

}新增第3個建構函式後就是引數house&&那個後,

house s=build(h);

返回生成s時,不再會是呼叫copy建構函式,而是呼叫右值建構函式,不需要像copy建構函式一樣去

重新分配記憶體,只要把臨時物件的記憶體竊取過來就可以了!!!!

下面是乙個完整例子,**在github上載,

我的環境是fedora17,g++,記得編譯時需要新增-std=c++11,不然會出錯!

c 左值 右值 右值引用 左值引用

c 裡一切值必須屬於左值 右值兩者之一。左值 一切變數 包括用const修飾的變數 物件 包括引用都屬於左值 右值 一切字面值 可以是巨集 臨時無名物件 函式返回值 表示式 如a n 說明一下 函式返回值,返回的是某乙個型別的值,並不是返回變數。左值並不是說能放在 左邊的值就是左值 雖然用const...

c 左值 右值 左值引用 右值引用

在c語言中,左值認為是賦值語句的左側,右值認為是賦值語句的右側。在c 中,意義稍有不同。c 中,每乙個表示式會產生乙個左值或者右值,相應的,該表示式也就被稱作 左值表示式 右值表示式 乙個左值表示式的求值結果是乙個物件或者是乙個函式。左值可以當右值使用,而右值不能當左值使用。c prime 中這麼簡...

C 左值 右值 左值引用 右值引用

就變數而言,對於一些變數,我們只會讀取並使用它們的值,而不會改變他們的值 唯讀 對於其餘的變數,我們既會讀取它們的值,有的時候還會改變它們的值 讀寫 這是很常見的。在c 中,前一種變數稱為右值,後一種變數稱為左值,例如 int a 1 a是左值,1是右值稍稍不同的一點是,在c 中,乙個變數是左值還是...