<分区>
在另一个主题中有人建议使用
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
。
这对我来说很有意义,但可能还有其他我想念的东西在起作用。那么,哪个更好,为什么?
最佳答案
正如 Herb Sutter 在 Almost Always Auto 注意到的那样,在这种情况下使用 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>
关于c++ - `auto x = f()` 比 `T x = f()` 好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496605/
相关文章:
c++ - 优先顺序 : Smart Pointer and Class Destructor
c++ - "Unlimited"CEdit text without ES_AutoHScroll
c++ - VS2013 - 输出窗口不显示 std::cout
c++ - 我可以在 g++ 4.4 中使用 auto 吗?
c++ - 可能的编译器错误?使用从模板化静态成员函数检索的指针调用模板化方法时,无法进行自动推导
c++ - 同一 C++ 项目中的 ASCII 和 UTF-8(或 UCS-2 和 UTF-16)字符串