【发布时间】:2020-03-08 09:36:21
【问题描述】:
我有一个看起来像这样的模板
template <typename T> class Foo
{
public:
Foo(const T& t) : _t(t) {}
private:
const T _t;
};
在参数类型像 bool 或 char 这样微不足道的情况下,是否有一种精明的模板元编程方法可以避免使用 const 引用?喜欢:
Foo(stl::smarter_argument<T>::type t) : _t(t) {}
【问题讨论】:
-
我不会担心,如果函数很小,编译器会内联它,引用甚至不存在。如果函数很大,将整数包装到引用中的微小成本将是微不足道的
-
我会更担心完美转发,然后避免引用小数据类型。我猜在大多数情况下,通过 r 值引用传递可以优化为按值传递。
-
要记住的一点,答案中没有指出:你正在做的事情会打败隐含的演绎指南。如果您关心为
Foo工作的类模板参数推导,您应该记住编写显式推导指南。