正在浏览模板。传递两个模板参数的方法是:
template <typename T1, typename T2>
inline T1 max (T1 const& a, T2 const& b) {
return a < b ? b : a;
}
…
max(4,4.2) // OK, but type of first argument defines return type
这有两个缺点:
无论来电者的意图如何,其他参数(T2)的参数都可能会转换为此类型。
将第二个参数的类型转换为返回类型会创建一个新的本地临时对象。
我理解第一个而不是第二个。在第二点的背景下真正发生了什么?
答案 0 :(得分:3)
如果a < b
为真,则返回b
。但是,需要将其从T2
转换为T1
。这需要一个副本(在简单的情况下可以优化)。
答案 1 :(得分:1)
它会复制,因为您按值返回。毕竟,模板类型最终就像普通类型一样。
如果您想要返回const引用,请返回const T1&
,但这会将T2
限制为T1
。
我们可以做更复杂的模板来覆盖这两种情况,并在类型不同时按值返回,但如果没有则返回const ref,但这可能超出了练习的范围