#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输出:
错误C2664:
'Foo<T>::Foo(T &&)'
:无法将参数1从'int'
转换为'int &&'
我不能将左值绑定到右值参考是否正常?
修改
功能相同:
void f(int && v)
{
}
int v;
f(v); //won't compile
我有点困惑,因为我认为std :: forward对于检测是否使用左值或右值引用调用方法很有用。 但似乎我们不能将任何左值绑定到右值参考...至少没有模板参数但我不太了解
答案 0 :(得分:2)
调用移动构造函数需要r值而不是l值是正常的,因为l值可以在移动构造函数运行后命名,并且使用move-from值会引起意外行为。