为什么在包含类的构造函数之前调用静态成员的构造函数?

时间:2016-02-25 18:44:28

标签: 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;  // definition of a

int main()
{
    B b1, b2, b3;
    A a = b1.getA();

    return 0;
}

输出:
一个名为
的构造函数 B的构造函数叫做
B的构造函数叫做
B的构造函数叫

我无法理解我们如何获得上述输出以及第2类中第1类声明的对象。

1 个答案:

答案 0 :(得分:2)

  

我无法理解我们如何获得上述输出以及第2类中第1类声明的对象。

static A a; 

class B的静态成员,将为B的所有实例实例化一次。

甚至在输入main()之前就会发生这种情况,你很幸运

cout << "A's constructor called " << endl;  

效果很好,因为static个实例不能保证按特定顺序初始化(请注意std::cout只是另一个static对象实例)。