#include<iostream>
template<class T>
struct Foo
{
T v_;
Foo(T&& v):v_(std::forward<T>(v))
{
std::cout << "building Foo..\n";
}
};
int main()
{
int v;
Foo<int> foo(v);
std::cin.ignore();
}
Visual C++ 2010 输出:
error C2664:
'Foo<T>::Foo(T &&)'
: cannot convert parameter 1 from'int'
to'int &&'
我不能将左值绑定(bind)到右值引用是否正常?
编辑:
函数也是一样:
void f(int && v)
{
}
int v;
f(v); //won't compile
我有点困惑,因为我认为 std::forward 可用于检测方法是使用左值引用还是右值引用调用。 但似乎我们不能将任何左值绑定(bind)到右值引用中......至少没有模板参数但我不是很理解
最佳答案
调用移动构造函数需要右值而不是左值是正常的,因为左值可以在移动构造函数运行后命名,使用移出值会引发意外行为。
关于c++ - 在 MSVS2010 下将左值绑定(bind)到右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841309/