gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:35 26 4
gpt4 key购买 nike

我在我的书中看到一个声明:

You don't have to initialize a static member when you declare it; C++ will invoke the default constructor if you don't.

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

最佳答案

让我们分解一下。假设某处有一些 class Foo;。现在我们将其设为我们类的静态成员,

class Star
{
static Foo z;
// ...
};

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

// in, say, star.cpp
Foo Star::z; // OK, object lives here now


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

class Foo
{
public:
Foo(char, double); // the only constructor
// ...
};

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

// again in star.cpp
Foo Star::z('a', 1.5);


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

关于c++ - 静态成员和默认构造函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com