#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 就是乙個右值...