什么时候在c ++中初始化静态成员?

时间:2014-12-23 01:56:56

标签: c++

当我运行以下程序时,它会打印"一个名为"的构造函数,但是我没有定义任何对象,那么什么时候静态成员被初始化和销毁​​?

#include <iostream> 
using namespace std;

class A
{
    int x;
public:
    A() { cout << "A's constructor called " << endl;  }
};

class B
{
    static A a;
public:
    B() { cout << "B's constructor called " << endl; }
    static A getA() { return a; }
};
A B::a;
int main()
{
  // B b;
    //  A a = b.getA();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这是对象定义:

A B::a;

它是在第一次调用此转换单元中的函数之前的某个时刻构造的。由于这是main()的单位,因此构造函数在输入main()之前的某个时刻运行。如果在同一个单元中有其他全局对象,则它们的构造函数将以定义对象的相同顺序运行。