通过引用传递比通过值更昂贵

ere*_*der 9 c++ pass-by-reference pass-by-value

是否存在传递引用比C++中的传值更昂贵的情况?如果是这样,那会是什么情况?

Gre*_*osz 15

首选传递原始类型(int,char,float,...)和POD结构,这些结构可以按值复制(Point,complex).

这比通过引用传递时所需的间接更有效.

请参阅Boost的呼叫特征.

模板类call_traits<T>封装了"最佳"方法,以将某种类型T的参数传递给函数或从函数传递,并由一系列typedef组成,如下表所示.其目的call_traits是确保不会出现诸如"引用引用"之类的问题,并且可以以最有效的方式传递参数.


fa.*_*fa. 7

您可以阅读这篇文章"想要速度?通过价值"关于复制省略和RVO(按价值优化返回).它解释了引用有时会阻止编译器执行它们.


Meh*_*ari 5

是的,访问按引用传递的参数可能比按值传递的参数需要更多的间接级别。此外,如果参数的大小小于单个指针的大小,它可能会更慢。当然,这一切都假设编译器没有对其进行优化。