首页 > 解决方案 > 在通用代码中处理 getter 方法调用的结果

问题描述

当我编写泛型代码时,通常在编写非泛型代码时,我会像这样处理 getter 方法调用的结果:

const auto& result = obj.get();

这有一些优点,例如 ifget()稍后会被更改并返回一些不可复制的对象,或者在通用代码中您无法提前说明get()将返回的内容的性质时,result不会强制进行任何复制。唯一的限制是,因为result它绑定到get()whenget()按值返回的临时返回,所以它必须是const,这在许多情况下无论如何都可以。

另一方面,我看到很多人担心什么const auto&时候get()返回一些原始类型,例如intor size_t,而不是仅仅写const auto result = obj.get();,因为有人认为在使用引用时会在后台生成一些偷偷摸摸的、隐藏的和不必要的指针。

虽然确实没有优化会const auto& result = obj.get();生成稍微多一点的二进制代码,但我没有看到任何证据表明当优化开启时它是正确的。

const auto& result = obj.get();那么为所有用例编写真的有什么问题吗?是否有一些不可优化的情况下表现最差?

标签: c++

解决方案


推荐阅读