通过参考的通过比通过价值更昂贵
-
22-09-2019 - |
题
是否有一个情况下,通过C ++中的逐个传递比通过逐个价值更昂贵?如果是这样,那将是什么?
解决方案
喜欢传递原始类型(int,char,float,...)和pod结构,这些结构价格便宜,可以按值复制(点,复杂)。
这将比通过参考传递所需的间接方向更有效。
看 Boost的通话特征.
模板类
call_traits<T>
封装了将某种类型T的参数传递给或从函数传递的“最佳”方法,并由如下表中定义的Typedefs集合组成。的目的call_traits
是为了确保诸如“引用参考”之类的问题永远不会发生,并且该参数以最有效的方式传递。
其他提示
您可以阅读本文 “想要速度?按价值传递” 关于复制ELISION和RVO(按值优化返回)。它解释说,参考有时会阻止编译器这样做。
是的,访问通过参考参数传递的一个可能需要更多的间接级别,而不是通过值参数传递。此外,如果参数的大小小于单个指针的大小,则可能要慢。当然,所有这些都假设编译器没有优化它。
如果类型的大小相同或小于参考/指针的大小,则编译器可以通过参考简单地通过值来优化传递原始类型。不能保证编译器会这样做,因此,如果您有选择,请按值通过原始类型。但是,在模板的代码中,您通常必须无论如何都必须通过参考 - 考虑使用const引用的vector的push_back。如果您有INT的向量,则将传达对原始类型的引用。在这种情况下,您希望编译器通过用值替换参考来对其进行优化。由于矢量可以存储大型类型,因此接受const参考是最佳选择。
不隶属于 StackOverflow