2016-01-13 61 views
0

在mondern编译器中是否通过const值或const引用传递一个小对象会有影响吗?例如,我有几个方法接受并且不修改boost::units::quantity<boost::units::si::length, float>,它应该被优化以浮动。将参数值作为值与const参考的性能

通常我会将参数的类型声明为一个常量引用,但是如果我这样做,恐怕编译器不能优化模板的方式。

编辑:我没想到却被rahul.deshmukhpatil在评论中提到的,如果我接受const&编译器在我从一个多线程环境调用的情况下至少发出双码。

+1

_“但我恐怕编译器无法优化模板的方式,如果我这样做”_为什么?这些仅仅是确保类型一致性的语法糖。 –

+2

只是一般情况下,在多线程程序的情况下,如果您传递的对象由多个线程并发共享/执行,那么通过值或引用传递可能会有不同的结果。 –

+0

@πάνταῥεῖ因为我不确定'float const'参数是否与'float const'参数一样优化 – ooxi

回答

1

如果是POD,我希望按价值传递它会使总体性能略快。所谓“稍微”,我的意思是“只有在某种特定的工作方式中,某人的智慧不如每纳秒性能优先,才会关心”。

为了理解为什么,有必要了解在传统硬件上,如何进行函数调用以及如何通过参数。

除了POD之外,唯一的答案就是尝试任何一种方式,并收集一些统计数据。

如果你真的不在意几纳秒的价值差异,那么做一些更方便的事情。

而且,无论哪种情况,模板都是不相关的。