将prvalue传递给模板函数

问题描述 投票:1回答:1

这可能是一个过时的问题,因为我们有通用的参考文献。但是我说的是C ++ 98 ...因此,这是关于历史的一个问题。

[请不要在下面的示例中考虑到我所关注的问题...对我所关注的问题的解释将是多余的。

考虑

template<class T>
void f(T&){}

f(5);

为什么T未被初始化为const int?我可以写void f(const T&),它可以工作(在例外情况下,有时我们都需要),但这不是我的意思。

我要问的是-不​​将T初始化为const int的原因可能是什么?

c++ c++03 c++98
1个回答
0
投票

在C ++ 98中,只有R值和L值,没有PR值,等等。>

此特定问题将通过对类使用partial specialisation或对函数使用直接函数覆盖来解决。部分专业化更加灵活,这就是为什么许多现代C ++更喜欢对象(例如,lambda函数是对象,而不是函数)的原因。参见functors

在较早的C ++中处理此问题的方法是编写两个函数。

template<class T> void f(T&){}
template<class T> void f(const T&){}

然后,功能匹配规则将找到要使用的“最佳”规则。

这导致很多代码重复,这就是为什么通用引用如此流行的原因。

© www.soinside.com 2019 - 2024. All rights reserved.