C++范围规则说明



我刚刚遇到这个:

    vector<int> vOut;
    for(int ui=0;ui<3;ui++)
    {
            vector<int> v;
            v.push_back(ui);
            vOut.push_back(ui);
            cerr << "v...";
            printVec(v);
            cerr << "vOut...";
            printVec(vOut);
    }

这将产生以下输出:

五...内容(矢量):0|咔嚓...内容(矢量):0|

五...内容(矢量):1|咔嚓...内容(矢量):0|1|

五...内容(矢量):2|咔嚓...内容(矢量):0|1|2|

以为向量的生命周期在循环中的两个{}之间,但似乎我错了。对于变量,生存期使得在循环中重新迭代时不会"忘记"值,因此这种行为似乎非常不合适。

有谁知道为什么会这样?

您可以展开循环:

int ui=0;
{
    // code
}
ui++;
{
    // code
}
ui++;
{
    // code
}
ui++;

当您查看此代码时,应该清楚为什么局部变量的行为与它们一样。

最新更新