《C++入门》一书的第6.1.1章说:
每个本地statice
对象在第一次执行通过对象的定义之前初始化。 当函数结束时,局部静力学不会被破坏; 当程序终止时,它们将被销毁。
为了检查这一点,我运行了以下代码:
#include <iostream>
using std::clog;
using std::endl;
struct Bar {
Bar() {
clog << "constructing Num object" << endl;
}
int i = 0,
j = 0;
~Bar() {
clog << "destructing Num object" << endl;
}
};
void foo() {
clog << "foo() started" << endl;
static Bar b;
return;
}
int main() {
if (true) {
clog << "if-statement started" << endl;
foo();
}
clog << "if-statement exited" << endl;
return 0;
}
在这本书中,我还没有讨论struct
s和class
s,但我的理解是,函数bar()
在创建时会将消息记录到标准输出,而b
则会进行默认初始化。 如果是这样的话,那么为什么输出显示对象是在控制到达static Bar B;
时构造/初始化的,而不是在它到达这个语句之前?
输出:
if-statement started
foo() started
constructing Num object
if-statement exited
destructing Num object