c++ - 在 MSVS2010 下将左值绑定(bind)到右值引用

标签 c++ c++11 visual-c++-2010 rvalue-reference

#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/

相关文章:

c++ - 如何在 boost::filesystem 中使用 copy_file?

c++ - C++ 中的参数相关名称查找 : point from n3290 Draft

c++ - 如果类继承自 2 个模板化父类,则调用不明确。为什么?

visual-studio-2010 - 自定义操作系统上的 STL - std::list 有效,但 std::vector 无效

c++ - 使用 Visual C++ 2010 编译器在 code::block 中使用 widgets 库时,发生错误

c++ - 出现无法分配内存错误

c++ - 无限循环不会浪费cpu资源吗?

c++ - 带有 constexpr 的编译时数组

c++ - 忽略类模板的显式实例化?

c++ - 我如何为可移植代码块构建 wxWidget?