std move的實際工作過程

2021-09-08 22:54:07 字數 956 閱讀 2517

std::move的定義如下:

1 template 2 typename remove_reference::type && move(t&&t)

3

通過引用摺疊,此引數可以與任何型別的實參匹配,既可以傳遞給move乙個左值引用也可以傳右值引用,如:

string s1("hi"), s2;

s2 = std::move(string("bye1!"));//正確,從乙個右值移動資料

s2 = std::move(s1);//正確,但賦值之後,s1的值是不確定的。

1)針對std::move(string("bye1!")); 傳入的已經是右值引用

函式模板推斷出t的型別為string

因此,remove_reference用string進行例項化

remove_reference的 type成員是string

move的返回型別是string&&move的函式引數t的型別是string&&

因此等價於:

string&& move(string&& t);

函式體返回static_cast(t),由於t的型別已經是右值引用,因此無需進行任何轉化。

2)針對std::move(s1); 傳入的就是乙個左值

函式模板推斷出t的型別是string&(因為string& &&才能摺疊為string&)

因此,remove_reference用string&進行例項化

remove_reference的 type成員是string

move的返回型別是string&&

move的函式引數t的型別是string& &&,會摺疊為string&

因此等價於:

string&& move(string& t);

函式體返回static_cast(t),這裡t的型別是string&,通過static_cast將其轉化為string&&

linux macbook 實際工作筆錄

批量拷貝某乙個目錄下的所有指定的檔案到另乙個指定的目錄 bin bash old ifs ifs ifs echo en n b find name mp4 while read filepath doecho move file to 100036 dir filepath mv f filepa...

實際工作 Poi報表匯入匯出

poi常用的元件 常用元件 hssfworkbook excel的文件物件 hssfsheet excel的表單 hssfrow excel的行 hssfcell excel的格仔單元 hssffont excel字型 hssfdataformat 日期格式 hssfheader sheet頭 hs...

mysql實際工作中的應用

記錄一下實際應用中mysql方面需要注意的地方 4 mysql大於等於 小於等於的寫法 5 按照漢字的拼音排序,用的比較多是在人名的排序中,按照姓氏的拼音字母,從a到z排序 如果儲存姓名的字段採用的是gbk字符集,那就好辦了,因為gbk內碼編碼時本身就採用了拼音排序的方法 常用一級漢字3755個採用...