我在win32程序@ windows 7机器上使用代码“boost :: call_traits :: param_type”。令我惊讶的是,它不是“双重”而是“const double&”。
我认为所有原始类型都很好地使用“按值传递”的函数参数,这不是常识吗?因为很多人会使用is_pod来确定是否使用引用,不是吗?
答案 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引用。