如果我定义它接受一个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