为什么boost :: call_traits <double> :: param_type是“const double&amp;”,而不是“double”</double>

时间:2011-11-29 05:10:04

标签: c++ boost parameters

我在win32程序@ windows 7机器上使用代码“boost :: call_traits :: param_type”。令我惊讶的是,它不是“双重”而是“const double&amp;”。

我认为所有原始类型都很好地使用“按值传递”的函数参数,这不是常识吗?因为很多人会使用is_pod来确定是否使用引用,不是吗?

2 个答案:

答案 0 :(得分:4)

根据doc,该优化显然仅适用于“小型”内置类型。

通过快速查看source,看起来“小”类型被视为满足sizeof(T) <= sizeof(void *)的类型。在32位计算机上,这显然不包括double

在某些情况下,最好将参数传递为double而不是double const&,但与往常一样,您必须进行基准测试并进行测试......

答案 1 :(得分:-1)

boost::call_traits类模板尚未专门用于double。主类模板返回const T &,这就是const double &而不是double的原因,尽管在这种情况下它并不重要,但是如果{{1}那么重要是类类型,它有庞大的数据成员。为了避免不必要的复制,它是const引用。