溫馨提示×

溫馨提示×

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

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

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

發(fā)布時間:2021-11-26 13:32:39 來源:億速云 閱讀:214 作者:iii 欄目:大數(shù)據(jù)

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

對于只傳遞不處理的參數(shù),使用模板類型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.

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

譯者注:

考慮下面的函數(shù):

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

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

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

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

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

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

向AI問一下細節(jié)

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

c++
AI