功能模板不识别lvalue [英] function template does not recognize lvalue

查看:142
本文介绍了功能模板不识别lvalue的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码有问题



以下是其简化版本:

  #include< iostream> 
class A
{
public:
template< class T>
void func(T&&)// accept rvalue
{
std :: cout<<in rvalue\\\
;
}

template< class T>
void func(const T&)// accept lvalue
{
std :: cout<<in lvalue\\\
;
}
};
int main()
{
A a;
double n = 3;
a.func(n);
a.func(5);
}



我希望输出为:

  in lvalue 
in rvalue

但它是

 在右值中
在右值中
pre>

为什么?

解决方案

模板< class T& void func(T&&;) 通用参考 转发参考



要测试所需内容,请尝试:( Live example

 模板< typename T> 
class A
{
public:
void func(T&)// accept rvalue
{
std :: cout<在rvalue \\\
;
}
void func(T&)// accept lvalue
{
std :: cout<<in lvalue\\\
;
}
};

int main()
{
A< double>一个;
double n = 3;
a.func(n);
a.func(5。);
}


I have a problem in my code

Here is simplified version of it :

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

I expect the output to be :

in lvalue
in rvalue

but it is

in rvalue 
in rvalue

why ?!

解决方案

template <class T> void func(T&&) is universal reference forwarding reference.

To test what you want, try: (Live example)

template <typename T>
class A
{
public:
    void func(T&&)//accept rvalue
    {
        std::cout<<"in rvalue\n";
    }
    void func(T&)//accept lvalue
    {
        std::cout<<"in lvalue\n";
    }
};

int main() 
{    
    A<double> a;
    double n = 3;
    a.func(n);
    a.func(5.);
}

这篇关于功能模板不识别lvalue的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆