让我们有一个名为 Y 的函数重载:
void Y(int& lvalue)
{ cout << "lvalue!" << endl; }
void Y(int&& rvalue)
{ cout << "rvalue!" << endl; }
现在,让我们定义一个类似于 std::forward 的模板函数
template<class T>
void f(T&& x)
{
Y( static_cast<T&&>(x) ); // Using static_cast<T&&>(x) like in std::forward
}
现在看看 main()
int main()
{
int i = 10;
f(i); // lvalue >> T = int&
f(10); // rvalue >> T = int&&
}
正如预期的那样,输出是
lvalue!
rvalue!
现在回到模板函数f()
并替换static_cast<T&&>(x)
为static_cast<T>(x)
. 让我们看看输出:
lvalue!
rvalue!
一样的!为什么?如果它们相同,那么为什么要从tostd::forward<>
返回一个演员表?x
T&&