9

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

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不使用类型 in auto next = it;

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

4

4 回答 4

17

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

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

许多 C++11 特性在 VC10 中默认支持,并且auto是其中之一。

于 2012-11-27T11:30:27.060 回答
5

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

于 2012-11-27T11:26:50.757 回答
3

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

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

于 2012-11-27T11:30:18.870 回答
3

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

于 2012-11-27T11:28:37.613 回答