是否有一个情况下,通过C ++中的逐个传递比通过逐个价值更昂贵?如果是这样,那将是什么?

有帮助吗?

解决方案

喜欢传递原始类型(int,char,float,...)和pod结构,这些结构价格便宜,可以按值复制(点,复杂)。

这将比通过参考传递所需的间接方向更有效。

Boost的通话特征.

模板类 call_traits<T> 封装了将某种类型T的参数传递给或从函数传递的“最佳”方法,并由如下表中定义的Typedefs集合组成。的目的 call_traits 是为了确保诸如“引用参考”之类的问题永远不会发生,并且该参数以最有效的方式传递。

其他提示

您可以阅读本文 “想要速度?按价值传递” 关于复制ELISION和RVO(按值优化返回)。它解释说,参考有时会阻止编译器这样做。

是的,访问通过参考参数传递的一个可能需要更多的间接级别,而不是通过值参数传递。此外,如果参数的大小小于单个指针的大小,则可能要慢。当然,所有这些都假设编译器没有优化它。

如果类型的大小相同或小于参考/指针的大小,则编译器可以通过参考简单地通过值来优化传递原始类型。不能保证编译器会这样做,因此,如果您有选择,请按值通过原始类型。但是,在模板的代码中,您通常必须无论如何都必须通过参考 - 考虑使用const引用的vector的push_back。如果您有INT的向量,则将传达对原始类型的引用。在这种情况下,您希望编译器通过用值替换参考来对其进行优化。由于矢量可以存储大型类型,因此接受const参考是最佳选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top