C++ 中的静态数据成员

Static data member in c++

本文关键字:数据成员 静态 C++      更新时间:2023-10-16
#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;
}

输出:

A's constructor called 
B's constructor called 
B's constructor called 
B's constructor called 

在这里,即使 A 不是 B 的基类,为什么首先调用 A 的构造函数?

为什么 A 的构造函数作为代码的一部分被调用一次首先调用的原因如下:

  1. B有一个A类型的静态字段(不是指针、A类型的真实、实时实例(。
  2. 因此,B的任何用法都应要求对其进行一次静态初始化。
  3. 因此,需要初始化类型A的静态字段
  4. 因此,调用A的构造函数就是为了这样做。