自动变量及其类型

10

我在一篇文章中找到了如何使用迭代器从容器中删除元素的方法。在迭代过程中:

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 next = it; 中,auto 不需要类型?

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


请参阅C++11类型推断 - juanchopanza
6
默认情况下,VS10 启用了 C++11,因此你确实在使用 C++11。 - R. Martinho Fernandes
4个回答

18

auto 在 C++11 中的含义与之前不同。在先前的标准中,auto 是用于自动存储期的存储说明符——对象通常具有该类型,在其作用域结束时被销毁。在 C++11 中,auto 关键字用于变量类型推断。变量的类型是从用于初始化它的表达式中推断出来的,这与模板参数可以从模板函数的参数类型中推断出来的方式非常相似。

当输入丑陋冗长的类型没有任何好处时,这种类型推断非常有用。通常,类型可以从初始化器中明显地看出来。对于那些类型可能取决于模板实例化的变量也非常有用。

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


什么?它在VC++2010中受支持吗?我不知道。 - Silver Moon
这是否意味着auto不再处理存储期,还是仅仅增加了它所做的事情? - MrMesees

5

C++的较新版本中有一个简写方式,它允许我们避免使用笨重的迭代器符号,因为编译器能够推断出实际类型应该是什么。


4

这被称为类型推导(Type Inference),详见此处这个问题。在C++11中新增,旨在简化许多冗长且不必要的代码,特别是迭代器和函数绑定。


3

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

例如,这可以减少对于大型和复杂的模板类型所需输入的数量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接