我将右值传递给std::move(x),testForward(T&& v)但它print(T& t)在内部调用。
看起来右值v在调用之前已经变成了左值print()。我不知道为什么会发生这种情况。谁能解释一下吗?
#include<iostream>
using namespace std;
template<typename T>
void print(T& t) {
std::cout << "Lvalue ref" << std::endl;
}
template<typename T>
void print(T&& t) {
std::cout << "Rvalue ref" << std::endl;
}
template<typename T>
void testForward(T&& v) {
print(v); // call print(T& t);
}
int main(int argc, char* argv[])
{
int x = 1;
testForward(std::move(x)); // output: Lvalue ref
}
Run Code Online (Sandbox Code Playgroud) c++ ×1