c++ - `auto x = f()` 比 `T x = f()` 好吗?

标签 c++ c++11 auto object-slicing

<分区>

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

auto x = f();

代替

T x = f();

(如果f的签名是T f())。他们指出,如果有人碰巧将 f 更改为 U f(),这会阻止静默对象切片,其中 U 源自 T

这对我来说很有意义,但可能还有其他我想念的东西在起作用。那么,哪个更好,为什么?

最佳答案

正如 Herb Sutter 在 Almost Always Auto 注意到的那样,在这种情况下使用 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>

关于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++11 - 分离.cu和.cpp(使用c++11库)

c++ - 我可以在 g++ 4.4 中使用 auto 吗?

C++11 自动和 decltype

c++ - 可能的编译器错误?使用从模板化静态成员函数检索的指针调用模板化方法时,无法进行自动推导

c++ - 同一 C++ 项目中的 ASCII 和 UTF-8(或 UCS-2 和 UTF-16)字符串

c++ - 使用 rdbuf() 和运算符 << 在 C++ 中复制流时出错

c++ - 可以使用尾随返回类型进行条件重载吗?