什么时候构造函数调用静态对象

Mel*_*are 3 c++

我知道静态变量是在编译时初始化的,但是静态对象呢?

例如,如果我有以下代码:

class A {
    A();
};

A::A(){
    std::cout << "Constructing A" << std::endl;
}

int main(){
    std::cout << "Hello World!" << std::endl;
    static A A_obj;
    std::cout << "Goodbye cruel world" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该期望输出是:

Hello World!
Constructing A
Goodbye cruel world
Run Code Online (Sandbox Code Playgroud)

要么

Constructing A
Hello World!
Goodbye cruel world
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 8

"我知道静态变量在编译时被初始化"

不对.static函数范围的变量在第一次遇到时严格初始化.并将在关闭支撑后被破坏main.

您将按此顺序获得输出:

Hello World!
Constructing A
Goodbye cruel world
Run Code Online (Sandbox Code Playgroud)