相关疑难解决方法(0)

功能模板无法识别左值

我的代码有问题

这是它的简化版本:

#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)

为什么?!

c++ templates rvalue lvalue c++11

5
推荐指数
2
解决办法
205
查看次数

模板参数推导 - 推导 T 并使用 T&amp;&amp;

例如

template <typename T>
void function(T&& arg)
Run Code Online (Sandbox Code Playgroud)

有人可以详细解释一下函数签名如何结束为左值的 T& 和传入的右值的 T&& 吗?我知道以某种方式(需要标准线) T -> T& 在左值的情况下和 T -> T 在重估的情况下,然后通过组合 & 和 && 它导致左值/右值引用。

c++ templates c++11

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

标签 统计

c++ ×2

c++11 ×2

templates ×2

lvalue ×1

rvalue ×1