小编Gua*_*Liu的帖子

为什么右值参数使用时会变成左值?

我将右值传递给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++

-2
推荐指数
1
解决办法
84
查看次数

标签 统计

c++ ×1