我什么时候应该通过 T const&
返回?如果我不打算修改对象,我看不出它与按值返回有什么不同。通过 const 引用返回实际上只是意味着没有复制。所以什么时候返回 T const&
有用。
最佳答案
您更愿意按 const&
而不是按值返回的原因有两个。
首先是语义。通过 const&
返回内容的代码明确地告诉调用者,“这里是您所请求内容的只读版本。如果您想永久存储它,或者对其进行更改,您有责任复制它。”此返回类型的语义非常清晰,并且易于执行。
其次是优化。通过按值返回某些内容,您可以从编译器中删除一些优化机会。这不是说按值返回比按const&
返回效率低(事实上,在相反的情况下可能 为真——考虑一个在 64 位系统上返回 char
的函数)。它只是意味着您从编译器的优化工具箱中删除了一种工具。还有另一种工具可以替代它——即内联调用和复制省略——所以这可能是一个清洗。这完全取决于上下文。
我提到“语义”是第一个原因,因为我认为它是最重要的。有太多的优化变量和太多的移动部分,以至于通常很难知道编译器将能够使用哪些优化以及何时使用。然而,有一件事始终是确定的——清晰的语义比困惑的语义更容易被人类理解。
关于c++ - 我应该什么时候通过 T const& 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16964107/