在另一个主题中有人建议使用
auto x = f();
代替
T x = f();
(如果 的签名f
是T f()
)。他们指出,如果有人碰巧更改f
为从U f()
哪里U
下降,这可以防止无声的对象切片T
。
这对我来说很有意义,但我可能还缺少其他的东西。那么,哪个更好,为什么?
在另一个主题中有人建议使用
auto x = f();
代替
T x = f();
(如果 的签名f
是T f()
)。他们指出,如果有人碰巧更改f
为从U f()
哪里U
下降,这可以防止无声的对象切片T
。
这对我来说很有意义,但我可能还缺少其他的东西。那么,哪个更好,为什么?
在这种情况下使用的最大优势之一auto
是,正如 Herb Sutter 在“几乎总是自动”中注意到的那样,这auto
使得 API 的使用更易于使用。也就是说,可以修改/重构 API,而无需对客户端代码进行任何必要的更改。
例如:
template<typename T>
T* abstract_factory::create();
template<typename T>
std::shared_ptr<T> abstract_factory::create();
Foo* instance = abstract_factory::create<Foo>();
Foo* instance = abstract_factory::create<Foo>(); //TYPE ERROR!!!
auto
auto instance = abstract_factory::create<Foo>(); //OK! type infered to std::shared_ptr<Foo>