中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

彭山县| 凤庆县| 宜川县| 广水市| 阜阳市| 康平县| 宁陵县| 兴国县| 教育| 麦盖提县| 内江市| 呼伦贝尔市| 大丰市| 天台县| 汉中市| 东港市| 大悟县| 资中县| 凤翔县| 新平| 大化| 壶关县| 鄂伦春自治旗| 镇原县| 安塞县| 祁连县| 潼关县| 丹寨县| 北海市| 莱州市| 绥棱县| 昌平区| 澄城县| 苏州市| 离岛区| 崇州市| 兰西县| 镇原县| 张家港市| 新和县| 青浦区|