別のトピックでは、誰かが使用を提案しました
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。
それは私には理にかなっていますが、私が見逃していることが他にもあるかもしれません。では、どちらが優れており、その理由は何ですか?
このコンテキストで使用することの最大のメリットの 1 つは、autoHerb Sutter が「Almost Always Auto」で気付いた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>