我在帖子中发现了如何使用迭代器从容器中删除元素。在迭代时:
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!
答案 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变量的类型由初始化程序的类型推导出来。
例如,这减少了大型复杂模板类型的输入量。