c++ 哪个更快,在函数中返回值,还是使用引用参数?

标签 c++ function reference

<分区>

除了更好或最安全的做法之外,在函数中返回值通常更快,还是仅通过引用更改参数?还是有更快的方法?

最佳答案

如果不启动 RVO,具有深拷贝的大对象按值返回的速度会很慢。

但大小并不总是起作用。例如,返回 1 字节对象的速度可能与返回 2 字节或 4 字节甚至 8 字节对象一样快,具体取决于平台。

通常不是什么更快,而是使用上下文中需要什么。在原语的情况下,当意图输出值时,它通常按值返回。当对象标识很重要或意图是修改实际对象时,您将通过引用返回。

也有可能的限制。例如,你永远不应该通过引用返回一个局部函数,因为这是一个等待发生的问题。您可以通过引用返回一个私有(private)成员变量,但话又说回来,您可以简单地将其公开。

这还取决于您所说的“按引用返回”是什么意思,因为这可能是 C++ 风格的引用返回,也可能是 C 风格的指针返回。后者更常用,当您在函数中动态分配对象并只返回指向它的指针时,对于大对象或唯一对象,这是可行的方法。

此外,除了 RVO 之外,还有移动语义,它在按值返回时仍然发挥作用。深拷贝的开销是一个长期存在的问题,最近在 C++11 中得到解决。一些框架(如 Qt)通过使用浅拷贝和隐式共享资源更早地解决了这个问题。

关于c++ 哪个更快,在函数中返回值,还是使用引用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857833/

相关文章:

c++ - RegisterHotKey 困惑

具有抽象类指针的对象的 C++ 拷贝

MATLAB 特征函数

c# - 在类 C# 中使用 ref

c++ - .lib 文件的 VS2015 "no symbols loaded for this document"

c++ - 如何绕过模板虚函数来实现我的目标?

javascript - 如何调用函数并传入变量?

Grails:如何引用 Service 本身并在 Java 中使用它?

继承引用成员的构造函数中的 C++ 默认初始化

c++ - 为特定时间快速搜索音符建模音乐(音符)的最佳方式