您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“C++的std::forward怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++的std::forward怎么使用”吧!
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ù)傳遞的。
譯者注:最終還是要被某段代碼作為左值使用的。
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ù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。