c++ - C++ 11 auto关键字多少太多了?

标签 c++ types c++11 type-inference auto

我一直在为复杂的模板化类型使用 C++11 标准中可用的新 auto 关键字,我相信它就是为此而设计的。但我也将它用于以下用途:

auto foo = std::make_shared<Foo>();

更怀疑的是:

auto foo = bla(); // where bla() return a shared_ptr<Foo>

我还没有看到很多关于这个话题的讨论。似乎 auto 可能被过度使用,因为类型通常是一种文档和健全性检查的形式。您在使用 auto 方面划清界限,这个新功能的推荐用例是什么?

澄清一下:我不是在征求哲学意见;我正在询问标准委员会对这个关键字的预期用途,并可能对在实践中如何实现预期用途发表评论。

最佳答案

我认为当乍一看很难说如何写类型时,应该使用 auto 关键字,但是表达式右侧的类型是显而易见的。例如,使用:

my_multi_type::nth_index<2>::type::key_type::composite_key_type::
    key_extractor_tuple::tail_type::head_type::result_type

获取 boost::multi_index 中的复合键类型,即使您知道它是 int。你不能只写 int 因为它可能在未来被改变。在这种情况下,我会写 auto

因此,如果 auto 关键字在特定情况下提高了可读性,那么就使用它。当读者很清楚 auto 代表什么类型时,您可以编写 auto

这里有一些例子:

auto foo = std::make_shared<Foo>();   // obvious
auto foo = bla();                     // unclear. don't know which type `foo` has

const size_t max_size = 100;
for ( auto x = max_size; x > 0; --x ) // unclear. could lead to the errors
                                      // since max_size is unsigned

std::vector<some_class> v;
for ( auto it = v.begin(); it != v.end(); ++it )
                                      // ok, since I know that `it` has an iterator type
                                      // (don't really care which one in this context)

关于c++ - C++ 11 auto关键字多少太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31214069/

相关文章:

c++ - std::mutex::lock() 产生奇怪的(和不必要的)汇编代码

c++ - 为什么对 std::tuple 实现使用递归继承不好?

c++ - Busybox 编译失败 - 网络/nslookup.c 错误

c++ - 如何将 DWORD 或 char* 类型的变量转换为 LPCWSTR?

c++ - 将任何函数作为模板参数传递?

haskell - 不同类型的case表达式导致Haskell

python - 无法将 __repr__/__str__ 动态绑定(bind)到使用类型创建的类

c++ - 清除 QSerial 正在使用的 QList

c++ - 为什么 `uint64_t` 的模板特化与 Mac 平台上的 `unsigned long` 不匹配?

c++ - 函数引用参数的默认值