c++ - 为什么我不能在 C++ 中初始化静态字段

标签 c++ static

<分区>

Possible Duplicate:
Defining static members in C++

我正在研究 C++,但我不明白如何在 C++ 中使用静态字段,它们似乎毫无用处。请指正。

我不能那样做:

class AClass{
    public:
        static int static_field = 0;
};

那也行不通

class AClass{
    public:
        static int static_field;
};

int main(){
    int AClass::static_field = 0;
    return 0;
}

最佳答案

实际上,你很接近。

您应该将:int AClass::static_field = 0; 移到 main() 之外,以便它在 CPP 文件中是全局的,最好是 AClass.cpp。

这样,您就可以在 header 中声明它并在源文件中对其进行初始化。您可以在 main() 或其他任何地方使用它,只需在设置此声明/初始化后执行 AClass::static_field 即可。

PS:它们绝对不是没用的。

这是一个很好的用例...假设您有内存泄漏并且需要追踪它们。您在类中放置了一个静态计数器,因此该类的所有实例都共享它。然后让任何构造函数/析构函数递增和递减该计数器。因此,您可以打印计数器以显示存在多少个类的实例,以帮助查找泄漏。

关于c++ - 为什么我不能在 C++ 中初始化静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905022/

相关文章:

c++ - 将私有(private)内部类放入 main 中

C++:使用析构函数删除指针静态 vector 中的对象?

c++ - 静态结构链接器错误

c++ - 静态和动态分配之间的 CPU 时间差异

c++ - 赋值操作困惑

python - 如何在 Mann-whitney u 测试的数据框中忽略 NaN?

c++ - 我什么时候在 C++ 中使用 const volatile、register volatile、static volatile?

java - 如何从数组中为 Jtextfield 设置文本?

c++ - 包含模板参数包的函数模板的部分排序

来自 cppreference.com 的 C++ 结构初始化