c++ - 我应该什么时候通过 T const& 返回?

标签 c++

我什么时候应该通过 T const& 返回?如果我不打算修改对象,我看不出它与按值返回有什么不同。通过 const 引用返回实际上只是意味着没有复制。所以什么时候返回 T const& 有用。

最佳答案

您更愿意按 const& 而不是按值返回的原因有两个。

首先是语义。通过 const& 返回内容的代码明确地告诉调用者,“这里是您所请求内容的只读版本。如果您想永久存储它,或者对其进行更改,您有责任复制它。”此返回类型的语义非常清晰,并且易于执行。

其次是优化。通过按值返回某些内容,您可以从编译器中删除一些优化机会。这不是说按值返回比按const&返回效率低(事实上,在相反的情况下可能 为真——考虑一个在 64 位系统上返回 char 的函数)。它只是意味着您从编译器的优化工具箱中删除了一种工具。还有另一种工具可以替代它——即内联调用和复制省略——所以这可能是一个清洗。这完全取决于上下文。

我提到“语义”是第一个原因,因为我认为它是最重要的。有太多的优化变量和太多的移动部分,以至于通常很难知道编译器将能够使用哪些优化以及何时使用。然而,有一件事始终是确定的——清晰的语义比困惑的语义更容易被人类理解。

关于c++ - 我应该什么时候通过 T const& 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964107/

相关文章:

c++ - tbb::parallel_for 将 ‘const value_type’ 作为 ‘this’ 参数传递会丢弃限定符

c++ - 关于返回对临时参数的 const 引用

c++ - 无法从 Qlinedit 获取 20 字节的十六进制输入并存储到 Qstring

c++ - 使用 C/C++ 在 Windows 中打印 HTML 文档?

c++ - 介绍 "auto"的同义词

C++:静态成员函数和变量——静态变量的重新定义?

c++ - 在 C++ 中多次调用同一个 lambda

c++ - std::endl 的值是否取决于操作系统?

c++ - 在哪里定义/声明比较运算符的重载为库中的非成员函数?

c++ - 我如何使用 GCC 选项 -iprefix 和 -iwithprefix?