自动变量及其类型

问题描述 投票:7回答:4

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

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!

c++ c++11 auto
4个回答
14
投票

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

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

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


5
投票

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


3
投票

它被称为Type Inference,详见this question。 C ++ 11中的新增功能,旨在简化许多冗长且不必要的代码,特别是对于迭代器和函数绑定。


3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.