以下是&&
的通用參考?默認的模板類型可以是通用引用嗎?
template <class Function = std::greater<int> > void f(Function&& f = Function());
以下是&&
的通用參考?默認的模板類型可以是通用引用嗎?
template <class Function = std::greater<int> > void f(Function&& f = Function());
術語universal reference
是由斯科特·梅耶斯編造的術語,用於區分正常的右值引用,即int&&
和模板代碼中的右值引用,即T&&
。這很重要,因爲模板代碼中引用了參考摺疊規則,所以這個術語用於幫助教學。它被稱爲unversal reference
的原因是因爲它可以綁定到任何東西。
請記住,有沒有這樣的東西在C++語言universal reference
,Function&&
是右值引用至於語言而言。但是,是的,在Scott Meyer的術語中,Function&&
在您的示例中爲universal reference
。
是& &一個普遍的參考?
的排序。像復活節兔子和聖誕老人一樣,實際上沒有像通用參考(對不起,如果我爲你寵壞了)。標準中沒有顯示通用參考標準。這是由斯科特·梅耶斯(Scott Meyers)提出的術語,用來描述「特殊演繹規則」激活時的模板右值參考。
顯示的內容是有效的代碼。特殊的扣除規則適用於這種情況。也就是說,當您傳遞一個左值參數A
到f
時,Function
將推斷爲A&
。所以按斯科特的定義,是的,Function
是一個「通用參考」。
Looks like it,std::forward<Function>
在您的函數中調用時正確地轉發參數類型。
+1這幾乎就像我們在同一個腳本中同時打字一樣。做得好。 – 2013-03-03 02:42:37
謝謝,也給你+1,因爲我可能從閱讀SO上的答案中學到了大部分內容。 – 2013-03-03 02:44:25
gah,太晚了...浪費了我的時間進行代碼測試:D – 2013-03-03 02:47:41