如果我定義它接受一個rvalue參考參數的函數:右值參考參數和模板函數
template <typename T>
void fooT(T &&x) {}
我可以調用它,使用GCC 4.5,與任一a
,ar
,或arr
:
int a, &ar = a, &&arr = 7;
fooT(a); fooT(ar); fooT(arr);
但是,調用類似,非模板功能,
void fooInt(int &&x) {}
這三個參數中的任何一個都會失敗。我正在準備加強我對forward
的瞭解,但是這已經讓我失望了。也許它是GCC 4.5;我很驚訝地發現,從A Brief Introduction to Rvalue References第一個例子也給出了編譯錯誤:
A a;
A&& a_ref2 = a; // an rvalue reference
使這個例子工作的正確方法是明確*使它成爲一個右值,其中:A && a_ref2 = std :: move(a)'。 *明確是一件好事,所以你不會意外移動東西。 – GManNickG 2011-04-03 21:22:28
[Scott Meyers的解釋](http://channel9.msdn.com/Shows/Going+Deep/Cpp-and-Beyond-2012-Scott-Meyers-Universal-References-in-Cpp11)。這現在被稱爲*通用參考* – 2014-06-13 23:11:08