2012-11-27 113 views
6

我在一篇文章中发现如何使用迭代器从容器中删除元素。虽然迭代:自动变量和它的类型

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!

+0

请参阅[C++ 11 type inference](http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference) – juanchopanza

+5

默认情况下VS10的C++ 11已开启。所以,你确实使用C++ 11。 –

回答

12

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

当输入丑陋的长类型没有任何好处时,这种类型的扣除是有用的。通常,这个类型在初始化程序中是显而易见的。对于其类型可能取决于其模板的实例化的变量也很有用。

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

+0

是什么?它支持在vC++ 2010?我不知道 –

+0

这是否意味着自动不再处理存储时间,或仅仅是它增加了它的功能? – MrMesees

4

这是C++的新版本中的一个缩写,它允许我们避免笨重的迭代器表示法,因为编译器能够推断出实际类型应该是什么。

2

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

2

这叫做type inference。自动变量的类型由初始值设定项的类型推导出来。

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