提问者:小点点

何时创建本地静态对象?


《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;
}

在这本书中,我还没有讨论structs和classs,但我的理解是,函数bar()在创建时会将消息记录到标准输出,而b则会进行默认初始化。 如果是这样的话,那么为什么输出显示对象是在控制到达static Bar B;时构造/初始化的,而不是在它到达这个语句之前?

输出:

if-statement started
foo() started
constructing Num object
if-statement exited
destructing Num object

共0个答案