C ++范围规则澄清

时间:2016-02-21 22:36:51

标签: c++ scoping

我刚看到这个:

    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 | VOUT ...内容(向量):0 |

     

配...内容(向量):1 | VOUT ...内容(向量):0 | 1 |

     

配...内容(向量):2 | VOUT ...内容(向量):0 | 1 | 2 |

我认为向量的生命周期在循环中的两个{}之间,但似乎我错了。对于变量,生命周期是这样的,当重新遍历循环时,该值不会被“遗忘”,因此看起来这种行为非常不合适。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

您可以展开循环:

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

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