我该什么时候应该回到T const&?

Me *_*d I 3 c++

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

Joh*_*ing 5

有两个原因可以让您更喜欢返回const&而不是按值返回.

首先是语义.返回某个代码的代码const&明确地告诉调用者,"这里是您要求的只读版本.如果您想永久存储它,或对其进行更改,您有责任制作它的副本. " 此返回类型的语义非常清楚,并且易于实施.

第二是优化.通过按值返回某些内容,可以从编译器中删除一些优化机会.这并不是说返回by-value 效率低于返回值const&(事实上​​,在相反的情况下可能是真的 - 考虑char在64位系统上返回a的函数).它只是意味着您从编译器的优化工具箱中删除其中一个工具.还有另一种工具可以替换它 - 即,将调用与复制省略一起内联 - 所以这可能是一种清洗.这一切都取决于背景.

我提到"语义学"是第一个原因,因为我认为它是最重要的.有许多变量需要优化和很多移动部件,因此通常很难知道编译器能够使用什么优化以及何时使用.然而有一件事是certian - 人类比混乱的语义更容易理解清晰的语义.