0

在另一个主题中有人建议使用

auto x = f();

代替

T x = f();

(如果 的签名fT f())。他们指出,如果有人碰巧更改f为从U f()哪里U下降,这可以防止无声的对象切片T

这对我来说很有意义,但我可能还缺少其他的东西。那么,哪个更好,为什么?

4

1 回答 1

1

在这种情况下使用的最大优势之一auto是,正如 Herb Sutter 在“几乎总是自动”中注意到的那样,这auto使得 API 的使用更易于使用。也就是说,可以修改/重构 API,而无需对客户端代码进行任何必要的更改。
例如:

API v1.0

template<typename T>
T* abstract_factory::create();

API v2.0

template<typename T>
std::shared_ptr<T> abstract_factory::create();

用法(无自动)

 Foo* instance = abstract_factory::create<Foo>();

客户端更新 API 库到 v2.0

 Foo* instance = abstract_factory::create<Foo>(); //TYPE ERROR!!!

使用更新auto

 auto instance = abstract_factory::create<Foo>(); //OK! type infered to std::shared_ptr<Foo>
于 2013-08-28T21:54:39.890 回答