静态成员和默认构造函数C++

rub*_*buc 4 c++ constructor static-members

我在书中发现了一句话说:

在声明静态成员时,您不必初始化静态成员; 如果不这样做,C++将调用默认构造函数.

这真的让我感到困惑的是它意味着什么.他们只谈论对象成员吗?如果是这样,它会在什么时候调用默认构造函数?另外,如何在没有默认构造函数的情况下初始化静态成员对象?

Ker*_* SB 14

让我们分解吧.假设有一些class Foo;地方.现在我们将它作为我们班级的静态成员,

class Star
{
  static Foo z;
  // ...
};
Run Code Online (Sandbox Code Playgroud)

现在本质上声明了一个全局对象Foo Star::z- 那么这是如何实例化的呢?标准告诉你:它得到默认构造.但请记住,您必须在一个翻译单元中提供实际的对象实例:

// in, say, star.cpp
Foo Star::z;  // OK, object lives here now
Run Code Online (Sandbox Code Playgroud)


现在假设Foo实际上没有默认构造函数:

class Foo
{
public:
  Foo(char, double); // the only constructor
  // ...
};
Run Code Online (Sandbox Code Playgroud)

现在有一个问题:我们如何构建Star::z?答案是"就像上面一样",但现在我们必须调用一个特定的构造函数:

// again in star.cpp
Foo Star::z('a', 1.5);
Run Code Online (Sandbox Code Playgroud)


该标准实际上有两个不同的概念"初始化"(一个语法概念)和"构造"(一个函数调用),但我认为我们现在不需要进入这个概念.