for 循环中的对象作用域和生命周期

Object scope and lifetime in a for loop

假设我有以下代码。

vector<Cat> v; \Cat is a class
for (int i = 0; i < 5; i++)
{
    Cat cat1;
    if (someFunction(i))
    {
        cat1.setName("Whiskers");
        v.push_back(whiskers) ;
    }
}

我的问题是,在 for 循环中,对象 cat1 在执行 0 to 4 时是否超出范围?那就是析构函数会在这里被调用 5 次还是只调用一次?

构造函数和析构函数被调用了5次,对吧。

因为控制流跨越了 5 次 cat 的初始化,以及 5 次其作用域的结束(循环块的结束 '}')。

实际上,您在最外面的大括号中看到的实际上是在循环条件 (i < 5) 为真时重复的一个复合语句。