自动变量及其类型

时间:2012-11-27 11:25:54

标签: c++ c++11 auto

我在帖子中发现了如何使用迭代器从容器中删除元素。在迭代时:

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!

4 个答案:

答案 0 :(得分:14)

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

当键入丑陋的长类型没有任何好处时,此类型推断非常有用。通常,类型从初始化器中显而易见。它对于类型可能取决于它出现在哪个模板实例化的变量也很有用。

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

答案 1 :(得分:5)

它是较新版本的C ++的简称,它允许我们避免使用笨重的迭代器表示法,因为编译器能够推断出实际类型应该是什么。

答案 2 :(得分:3)

它名为Type Inference,有关详细信息,另请参阅this question。 C ++ 11中的新增功能,旨在简化许多冗长且不必要的代码,特别是对于迭代器和函数绑定。

答案 3 :(得分:3)

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

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