C 11 右值引用

2021-09-06 15:31:31 字數 599 閱讀 2958

前面我寫了一篇文章介紹c++的物件返回:

如果**中出現返回物件的**是非常浪費效能的。因為返回乙個物件會有多次拷貝,還有影藏的臨時物件,浪費記憶體。

那麼如何解決這個問題,1 可以通過傳入引用/指標的方式,把內容獲取出來。

今天來介紹一種比較前衛的方法:右值引用

typedef struct test

int age;

int score;

}test;

test getstudent()

return (test);

int main()

test t = getstudent();

以上**執行的時候就會存在前面說的效能問題,可以寫成

test &&t = getstudent(); 避免了影藏的臨時物件的產生

另外std::move用法,例如

std::string s1("hi"), s2;

s2 = std::move(string("hi")); //一般是這種寫法,引用乙個匿名的物件,這樣能減少=賦值的拷貝過程。

s2 = std::move(s1); 轉移後s1 不確定

c 11 右值引用

右值引用 是一種復合型別,跟c 的傳統引用很類似。為更準確地區分兩種型別,我們把傳統的c 引用稱為 左值引用 而使用 引用 這一術語時,我們的意思同時包含兩種引用 左值引用和右值引用。右值引用的行為跟左值引用類似,不同之處在於 右值引用可以繫結到臨時量 右值 而 非const的 左值引用卻不能繫結到...

C 11 右值引用

消除兩個物件互動時不必要的物件拷貝,節省運算儲存資源,提高效率。能夠更簡潔明確地定義泛型函式。1.右值引用 int a a 1 here,a is an lvalue 上述的a就是乙個左值。c 11中左值的宣告符號為 為了和左值區分,右值的宣告符號為 printreference const str...

C 11右值引用

c 11中引入的乙個非常重要的概念就是右值引用。理解右值引用是學習 移動語義 move semantics 的基礎。而要理解右值引用,就必須先區分左值與右值。對左值和右值的乙個最常見的誤解是 等號左邊的就是左值,等號右邊的就是右值。左值和右值都是針對表示式而言的,左值是指表示式結束後依然存在的持久物...