爲什麼的std ::在C++標準功能<> ::運算符()的定義是:C++ 11的std ::功能和完美轉發
R operator()(ArgTypes...) const;
和不
R operator()(ArgTypes&&...) const;
?
有人會認爲,要正確轉發參數,我們需要& &,然後在轉發呼叫時在函數體中使用std::forward<ArgTypes>...
?
我部分地重新實現的std ::功能來測試這一點,我發現,如果我用& &,我得到「無法綁定‘XXX’左值到‘XXX & &’」從G ++,當我嘗試後通過參數按值運算符()。我認爲我對右值/轉發概念有足夠的把握,但我仍然無法理解這一點。我錯過了什麼?
謝謝,現在一切都變得非常有意義。 – airman
@Xeo,你的代碼編譯正確... http://ideone.com/7TyCB8 f(i)沒有錯誤,你能解釋「/ /錯誤」是什麼意思嗎,或者我正在使用編譯器錯誤。謝謝。 –
@WillBradley:重讀'main'頂部的註釋:***假設***'std :: function :: operator()'的簽名實際上是'R(Args && ...)' - 這可以通過'function '產生'operator()'的'void(int &&)',現在只接受rvalues。 –
Xeo