可以在引用中存储返回值表现最差吗?

nya*_*108 2 c++ reference return-value auto

我正在编写高度通用的代码,我正在将函数调用的返回值作为const auto&.例如:

const auto& value = foo();
Run Code Online (Sandbox Code Playgroud)

目的是以尽可能最通用的方式编写它,这样它就不会对返回类型做出任何假设foo,它可以通过值返回或通过引用返回而不会破坏客户端代码上的任何内容,即使该值是临时的.

但这段代码的表现最差:

const auto value = foo();
Run Code Online (Sandbox Code Playgroud)

如果foo()返回一个基本类型,如intdoubleenum

Joh*_*yer 7

我理解为什么你可能会认为它会产生运行时成本,但实际情况并非如此.

如果函数返回值类型,任何现代编译器都会立即将其折叠为值类型,而不是将其作为引用.你const int&只会成为一个int后编译.你可以在这里测试一下:https://godbolt.org/g/vT2FdG.