【问题标题】:auto variable and its type自动变量及其类型
【发布时间】:2012-11-27 11:25:53
【问题描述】:

我在一篇文章中发现了如何使用迭代器从容器中删除元素。迭代时:

for(auto it = translationEvents.begin(); it != translationEvents.end();)
    {
        auto next = it;
        ++next; // get the next element
        it->second(this); // process (and maybe delete) the current element
        it = next; // skip to the next element
    }

为什么auto没有auto next = it;中的类型使用?

我使用的是 VS10,而不是 C++11!

【问题讨论】:

标签: c++ c++11 auto


【解决方案1】:

auto 在 C++11 中的含义与以前不同。在早期的标准中,auto 是用于自动存储持续时间的存储说明符 - 对象在其作用域结束时被销毁的典型存储。在 C++11 中,auto 关键字用于变量的类型推导。变量的类型是从用于初始化它的表达式推导出来的,就像模板参数可以从模板函数的参数类型推导出来的一样。

当键入丑陋的长类型没有好处时,这种类型推导很有用。通常,类型在初始化程序中是显而易见的。它对于类型可能取决于它出现在哪个模板的实例化的变量也很有用。

VC10 默认支持许多 C++11 功能,auto 就是其中之一。

【讨论】:

  • 什么?它在 vc++2010 中支持吗?我不知道
  • 这是否意味着 auto 不再处理存储持续时间,或者仅仅是增加了它的功能?
【解决方案2】:

在较新版本的 C++ 中,它是一种简写方式,可以让我们避免笨拙的迭代器表示法,因为编译器能够推断出实际类型应该是什么。

【讨论】:

    【解决方案3】:

    它被称为Type Inference,详情参见this question。 C++11 中的新功能,旨在简化许多冗长且不必要的代码,尤其是迭代器和函数绑定。

    【讨论】:

      【解决方案4】:

      这称为type inference。 auto 变量的类型由初始化器的类型推导出来。

      例如,这减少了大型复杂模板类型的输入量。

      【讨论】:

        猜你喜欢
        • 2013-04-02
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2014-09-15
        • 2021-09-27
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        相关资源
        最近更新 更多