c++ 大括号内变量的做用域与生存周期

在C/C++中大括号指明了变量的做用域,在大括号内声明的局部变量其做用域自变量声明始,到大括号以后终结。咱们应该善用它,使咱们的程序更加清晰明白。尤为是在有许多形式重复的代码的程序段中,如下是一个伪代码例子:ios

#include <iostream>
#include <map>

using namespace std; // 我只是偷懒不要打我

class Foo {
public:
    ~Foo() {
        cout << "Foo destroyed" << endl;
    }
    int dat;
};

int main() {
    map<int, Foo&> m;
    {
        Foo f;
        f.dat = 100;
        pair<int, Foo&> p(1, f);
        m.insert(p);
    }
    cout << m.at(1).dat << endl;
}

若是没有大括号的约束,每一个临时变量都存在于函数做用域中,那么频繁增减流程时出错的几率大大增长了。放在大括号中,不只程序阅读起来很清楚,并且也不容易出错。f 的生存期是它所在的栈,因此它的生存期和 main 是同样的。f的做用域是所在的 block, 也就是它所声明最临近的 {} 之间。
f虽然不能在{}外访问,可是f的那块内存确确实实还在那儿,经过m进行读写是彻底没问题的.