91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

镇康县| 海城市| 赤城县| 高密市| 饶阳县| 抚远县| 吴堡县| 泾阳县| 蓬溪县| 阿巴嘎旗| 宝鸡市| 宾阳县| 友谊县| 织金县| 台山市| 武清区| 富裕县| 六安市| 比如县| 鄂温| 莲花县| 舞钢市| 万宁市| 临桂县| 偃师市| 崇仁县| 乌拉特前旗| 桐乡市| 黄浦区| 普兰店市| 泉州市| 阜新| 建始县| 石城县| 丰原市| 清涧县| 射洪县| 陆丰市| 临汾市| 麻城市| 新闻|