亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的std::forward怎么使用

發布時間:2021-11-26 13:32:39 來源:億速云 閱讀:216 作者:iii 欄目:大數據

本篇內容主要講解“C++的std::forward怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++的std::forward怎么使用”吧!

對于只傳遞不處理的參數,使用模板類型TP&&并在傳遞時使用std::forward

Reason(原因)

If the object is to be passed onward to other code and not directly used by this function, we want to make this function agnostic to the argument const-ness and rvalue-ness.

如果對象不在本函數內部使用而是繼續傳遞給其他代碼,我們希望本函數不會改變參數的常數特性和右值特性。

譯者注:

考慮下面的函數:

string f(string&& s){    if(s.size())        s[0]=toupper(s[0]);    return s}

右值引用作為參數類型使用的時候,首先被實參初始化,其結果是實參將無效化(右值引用的定義)。在函數內部,由于s已經奪取了實參的內容,因此可以作為左值自由使用。但是如果不是在函數體中直接使用而希望作為右值繼續傳遞給另外一個函數,就不能直接使用s作為實參(因為它已經變成了左值引用),而是使用forward恢復它的右值特性。

在這種情況下,也只有在這種(右值引用參數只傳遞不使用)情況下,將TP參數定義為TP&&(這里TP是模板類型)--這樣可以無視并維持常量特性和右值特性。因此任何使用TP&&的代碼聲明了它不在乎變量的常量特性和右值特性(因為已經被忽略),但會將該值(不加改變地)繼續傳遞給其他不在乎常量特性和右值特性的代碼(因為這些特性會被維持)。因為任何從調用者傳來的臨時對象都會在函數調用期間保持有效性(原因是調用者只有在函數調用之后才有機會銷毀這個對象),因此當TP&&被作為參數(在函數內部)使用時是安全的。TP&&類型的參數本質上總是應該在函數體中通過std::forward繼續傳遞的。

譯者注:最終還是要被某段代碼作為左值使用的。

Example
template <class F, class... Args>inline auto invoke(F f, Args&&... args) {    return f(forward<Args>(args)...);}

到此,相信大家對“C++的std::forward怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

昆山市| 金昌市| 高阳县| 仁布县| 通化县| 仁化县| 莱西市| 二连浩特市| 沛县| 积石山| 卓尼县| 遂宁市| 绥芬河市| 临西县| 旌德县| 临泽县| 山西省| 佛学| 江西省| 剑阁县| 博湖县| 安吉县| 宜黄县| 开原市| 阿拉善左旗| 敦化市| 阜新市| 平山县| 乌恰县| 萍乡市| 邢台市| 祁阳县| 瓦房店市| 南涧| 宜春市| 同江市| 桑植县| 乌鲁木齐县| 蓬溪县| 囊谦县| 佳木斯市|