功能模板不识别lvalue [英] function template does not recognize lvalue
本文介绍了功能模板不识别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&&)
isuniversal referenceforwarding 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屋!
查看全文