- T&&有两种含义,一种就是常见的右值引用;另一种是即可以是右值引用,也可以是左值引用
- 右值引用类型是独立于值的,一个右值引用参数作为函数的形参,在函数内部再转发该参数的时候它已经变成一个左值,并不是他原来的类型
#include <iostream>
using namespace std;
template <typename T>
void print(T &t)
{
cout << "lvalue" << endl;
}
template <typename T>
void print(T &&t)
{
cout << "rvalue" << endl;
}
template <typename T>
void TestForward(T &&v)
{
print(v);
print(std::forward<T>(v));
print(std::move(v));
}
int main()
{
TestForward(1);
int x = 1;
TestForward(x);
print(std::forward<int>(x));
TestForward(std::forward<int>(x));
return 0;
}
运行结果:
lvalue
rvalue
rvalue
lvalue
lvalue
rvalue
rvalue
lvalue
rvalue
rvalue