这两天看《C++ Primer》才发现原来C++11标准新增了这么多内容,尤其醒目的就是auto类型说明符范围for语句啦!

最开始接触Python简直被for...in...美呆,再也不用每次便利都造轮子自己写个函数了,就像这样:

a = [1, 2, 3, 4]
for item in a:
    print(item)

这里只要内容是可数的,如stringtuplelistdict都能迭代遍历出来。

在C++11标准下,也能用到类似的循环了:

for (declaration: expression)
    statement

注意:这里expression表示的必须是一个序列,如用花括号括起来的初始值列表({1,2,3,4})、数组([1,2,3,4])或者vectorstring等类型的对象。

比如:

vector<int> a = { 1,2,3,4 };
for (int &item : a)
    cout << item << endl;

当用上auto后,甚至不需要明确声明临时变量的类型:

vector<int> a = { 1,2,3,4 };
for (auto &item : a)
    cout << item << endl;

有一点要注意的是,在for循环内不能增加迭代变量的元素

Python:

a = [1, 2, 3, 4]
for item in a:
    print(item)
    a.append(5)

这样会造成死循环!因为for循环永远也遍历不到a的最后一个元素

C++:

vector<int> a = { 1,2,3,4 };
for (auto &item : a)
{
    cout << item << endl;
    a.push_back(5);
}

在VS2015下能够编译成功,但运行时即会弹出错误:
vs2015.png