通过引用传递原始类型而不是按值返回的任何效率优势?

use*_*112 12 c++ performance

在C++中,通过引用传递原始类型而不是按值返回是否有效率优势?

And*_*owl 8

[...]通过引用传递原始类型而不是按值返回是否有效率优势?

不太可能.首先,除非您的分析器中有数据表明您有其他原因,否则在设计程序时不必担心性能问题.选择最简单的设计,以及最能传达您意图的设计.

而且,原始类型的复制通常很便宜,因此这不太可能成为您应用程序的瓶颈.因为它是最简单的选项,并且使得函数的接口最清晰,所以你应该传递值.

只看一下签名,很明显一个功能如:

void foo(int);
Run Code Online (Sandbox Code Playgroud)

不会存储对参数的引用(因此,不会遇到诸如悬空引用或指针之类的问题),不会以调用者可见的方式更改参数,依此类推等等.

以上都不能从函数签名中推断出:

void f(int&); // May modify the argument! Will it? Who knows...
Run Code Online (Sandbox Code Playgroud)

甚至:

void f(int const&); // May store a reference! Will it? Who knows...
Run Code Online (Sandbox Code Playgroud)

此外,通过允许编译器执行潜在别名可能阻止的优化,传递值甚至可以提高性能.

当然,所有这一切都假设您实际上不需要修改函数内部的参数,以便在函数返回后调用者可以看到对该参数的副作用 - 或者存储对该参数的引用论点.

如果是这种情况,那么您当然应该通过引用传递并使用适当的const资格.

有关更广泛的讨论,请参阅StackOverflow上的此问答.


Mar*_*k B 1

可能存在一些晦涩的架构,这种情况,但我不知道返回内置类型的性能低于通过引用传递输出参数的性能。如果需要,您可以随时检查相关程序集进行比较。