您好,登錄后才能下訂單哦!
本篇內容主要講解“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.
如果對象不在本函數內部使用而是繼續傳遞給其他代碼,我們希望本函數不會改變參數的常數特性和右值特性。
考慮下面的函數:
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繼續傳遞的。
譯者注:最終還是要被某段代碼作為左值使用的。
template <class F, class... Args>inline auto invoke(F f, Args&&... args) { return f(forward<Args>(args)...);}
到此,相信大家對“C++的std::forward怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。