写foo(const float&)浪费了吗?

时间:2014-01-12 17:59:02

标签: c++

当传递像int或float这样的基本类型时,写这样的东西是浪费精力:

foo(const float&);

而不仅仅是传递价值:

foo(float);

4 个答案:

答案 0 :(得分:3)

对于花车? Yes, pretty much.

这里没有任何好处:浮点数很小,副本不会比创建实现引用的指针慢。

答案 1 :(得分:2)

这取决于引用的实现。根据标准(§8.3.2/ 4):

  

未指明引用是否需要存储(3.7)。

从理论上讲,

引用可以使您免于float的副本。当然,如果将引用实现为指针,那将是徒劳的。因此答案取决于实现。

大多数情况下,这种微优化没有多大意义。我非常怀疑你的应用程序的瓶颈在float的副本中。

答案 2 :(得分:1)

请记住,在某些情况下,按值传递可以实现更广泛的编译器优化。 Chandler Carruth(Clang成名)谈到了优化编译器在处理keynote at C++ Now 2013中对象的引用/指针时遇到的一些困难。

答案 3 :(得分:0)

当传递像float这样的基本类型时,通过const引用传递任何东西都无济于事。按值传递几乎完成相同的事情 - 对参数值的任何更改都不会影响调用函数中的值(如果按值调用) - 不能对参数进行更改(如果通过const引用调用)

但是,对于类,传递const类引用比传递值(它必须复制对象)要高效得多。