【发布时间】:2020-04-30 01:59:50
【问题描述】:
我无法理解右值引用的工作原理。我有以下代码:
void f(int&& i)
{}
int main()
{
int i = 42;
int&& r = std::move(i);
f(r);
return 0;
}
在这里,我收到以下编译器错误:
prog.cpp: In function ‘int main()’:
prog.cpp:46:7: error: cannot bind rvalue reference of type ‘int&&’ to lvalue of type ‘int’
f(r);
^
prog.cpp:38:6: note: initializing argument 1 of ‘void f(int&&)’
void f(int&& i)
^
当我将r 明确声明为右值引用时,为什么编译器会认为我在传递左值?执行f(std::move(r)) 似乎可行,但我仍然不明白那里有什么不同。
这是因为在f(r) 调用中,r 被视为左值吗?如果有,std::move(r) 的类型是什么?
【问题讨论】:
-
不是真正的重复,但可能有(某些)您寻求的答案:What is std::move(), and when should it be used?
-
这能回答你的问题吗? Lvalue to rvalue reference binding
标签: c++