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)
该标准实际上有两个不同的概念"初始化"(一个语法概念)和"构造"(一个函数调用),但我认为我们现在不需要进入这个概念.
| 归档时间: |
|
| 查看次数: |
19954 次 |
| 最近记录: |