0

別のトピックでは、誰かが使用を提案しました

auto x = f();

それ以外の

T x = f();

(の署名が の場合f) T f()f彼らは、これにより、誰かがたまたま に変更されたU f()場合にサイレント オブジェクト スライスが防止されると指摘しましUT

それは私には理にかなっていますが、私が見逃していることが他にもあるかもしれません。では、どちらが優れており、その理由は何ですか?

4

1 に答える 1

1

このコンテキストで使用することの最大のメリットの 1 つは、autoHerb Sutter が「Almost Always Auto」で気付いた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 に答える