<分区>
除了更好或最安全的做法之外,在函数中返回值通常更快,还是仅通过引用更改参数?还是有更快的方法?
<分区>
除了更好或最安全的做法之外,在函数中返回值通常更快,还是仅通过引用更改参数?还是有更快的方法?
最佳答案
如果不启动 RVO,具有深拷贝的大对象按值返回的速度会很慢。
但大小并不总是起作用。例如,返回 1 字节对象的速度可能与返回 2 字节或 4 字节甚至 8 字节对象一样快,具体取决于平台。
通常不是什么更快,而是使用上下文中需要什么。在原语的情况下,当意图输出值时,它通常按值返回。当对象标识很重要或意图是修改实际对象时,您将通过引用返回。
也有可能的限制。例如,你永远不应该通过引用返回一个局部函数,因为这是一个等待发生的问题。您可以通过引用返回一个私有(private)成员变量,但话又说回来,您可以简单地将其公开。
这还取决于您所说的“按引用返回”是什么意思,因为这可能是 C++ 风格的引用返回,也可能是 C 风格的指针返回。后者更常用,当您在函数中动态分配对象并只返回指向它的指针时,对于大对象或唯一对象,这是可行的方法。
此外,除了 RVO 之外,还有移动语义,它在按值返回时仍然发挥作用。深拷贝的开销是一个长期存在的问题,最近在 C++11 中得到解决。一些框架(如 Qt)通过使用浅拷贝和隐式共享资源更早地解决了这个问题。
关于c++ 哪个更快,在函数中返回值,还是使用引用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29857833/