右值引用與模板學習筆記

2021-10-08 17:32:11 字數 2112 閱讀 8632

#include

using

namespace std;

intmain1

(void)*/

//右值是乙個和運算過程相匹配的臨時物件,這個臨時物件在於其所對應的語句執行完畢之後,就銷毀了

//所以,我們無法從語法層面上直接訪問。

//左值是乙個有名字,有固定位址的表示式

int a =10;

int& b = a;

const

int&c = a;

//==》為左值a命名乙個常量的別名c

int x =

1000

, y =

100;

const

int& i = x + y;

//==>為右值x+y命名乙個常量的別名i

int tt = x + y;

tt++

;//i++;

int&& right = x + y;

right++

;printf

("%d"

, right)

;//通過所謂&&,形成的語法叫做右值引用

//使得右值變成了乙個與左值完全相同的持久物件

system

("pause");

return0;

}

class

foo//如果乙個臨時物件,那麼我們使用淺拷貝是巨大意義:

//當我們需要具有「轉移語義」的拷貝建構函式時

//淺拷貝的效率意義就凸顯了

foo(

const foo& r)

//右值引用拷貝建構函式

foo(foo&& r)

~foo()

}void

show_p()

private

:int

*p;}

;foo func()

intmain

(void

)

void

myfunc

(int v)

//**模板

template

<

typename t>

void

tmp(t a)

intmain3

(void

)

void

rightfunc

(int

& v)

void

rightfunct

(int

&& v)

//**模板

template

<

typename t>

void

tmp(t&& a)

intmain

(void

)//模板引數型別推導

//move:

//t&& move(t& val)

//接受乙個引數val,然後返回這個引數右值引用

//左值: t&

//右值: t

//forward=> t& ==> t&&

#include

using

namespace std;

//引數型別為左值引用的目標函式

void

func

(int

&x)//引數型別為右值引用的目標函式

void

func

(int

&& x)

//引數型別為左值常引用

void

func

(const

int&x)

//引數型別為右值常引用

void

func

(const

int&& x)

//引數完美**

template

<

typename t>

void

funct

(t && a)

intmain

(void

)//stl make_pair make_unique=>臨時物件效率問題

C 學習筆記 引用摺疊和模板右值引用引數

函式模板進行引數傳遞時,對引用的傳遞有兩個例外規則 引用摺疊只能應用於間接建立的引用的引用,如型別別名或者模板引數,我們不能直接建立引用的引用。template void fun t val 定義fun為模板函式,引數型別為 int i 0 fun i i是左值,實參將會被推斷為int int j ...

c 右值引用 學習筆記

僅為個人理解,個人筆記 部分 和內容引用於文章從4行 看右值引用 來自鏈結文章裡 include using namespace std int g constructcount 0 int g copyconstructcount 0 int g destructcount 0 struct a ...

學習筆記 C 右值引用

void f string s 之前不知道兩個 是什麼意思,還以為是引用的引用,類似於二級指標的東西。後來參考了這篇文章 class a public a cout constructor 明白了這個是右值引用。首先需要明確一下左值和右值的定義 右值通過排他性定義,不是左值就是右值。a 就是乙個右值...