我的代码有问题
这是它的简化版本:
#include <iostream>
class A
{
public :
template <class T>
void func(T&&)//accept rvalue
{
std::cout<<"in rvalue\n";
}
template <class T>
void func(const T&)//accept lvalue
{
std::cout<<"in lvalue\n";
}
};
int main()
{
A a;
double n=3;
a.func(n);
a.func(5);
}
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
in lvalue
in rvalue
Run Code Online (Sandbox Code Playgroud)
但它是
in rvalue
in rvalue
Run Code Online (Sandbox Code Playgroud)
为什么?!
例如
template <typename T>
void function(T&& arg)
Run Code Online (Sandbox Code Playgroud)
有人可以详细解释一下函数签名如何结束为左值的 T& 和传入的右值的 T&& 吗?我知道以某种方式(需要标准线) T -> T& 在左值的情况下和 T -> T 在重估的情况下,然后通过组合 & 和 && 它导致左值/右值引用。