【问题标题】:Is there a quick way to zero all the static members of a class?有没有一种快速的方法可以将类的所有静态成员归零?
【发布时间】:2025-12-02 10:05:03
【问题描述】:

我有一个带有静态成员的类,每个循环都会重置为零,所以类似于:

class Stats
{
   static inline int counter1, counter2;
   static inline float time;
   static void resetStats() 
   {
       counter1 = 0;
       counter2 = 0;
       time = 0.f;
   }
}

使用非静态类,我可以创建一个零初始化的新对象并复制到我想要重置其值的对象。如果可能的话,我只需要记住,对于我在其中创建的每个成员,我还将它添加到“resetStats()”函数中。

【问题讨论】:

  • 如果每次循环迭代都需要将这些变量重置为零,为什么不在循环中声明您需要的变量并将它们设置为零?
  • @JohnFilleau 是的,只有静态成员。有人告诉我,如果它没有被实例化,那么静态类或命名空间在概念上会更好。在这种情况下,如果将所有成员归零更容易,我可以将其设为非静态类
  • @Zebrafish 如果成员不是静态的,您可以在重置函数中执行*this = Stats{} 之类的操作。但也可以考虑在 for 循环中简单地创建整个变量,而不是在每次循环迭代时重置它。

标签: c++ class static


【解决方案1】:

使变量成为类的非静态成员,并使用该类的静态实例。这样您就可以使用值初始化将所有成员设置为零:

class Stats
{
    static inline struct {
        int counter1, counter2;
        float time;
    } data;

    static void resetStats() 
    {
        data = {};
    }

也就是说,静态变量是全局状态。应该避免全局状态。

每个循环都会重置为零

这听起来像是非静态存储的理想用例。

【讨论】:

  • 我明白你的意思是应该避免全局状态,但是如果我需要在整个程序中从不同的函数(用于测量时间等)写入这些变量,我应该怎么做呢?
  • @Zebrafish 取决于。没有足够的细节来设计解决方案。
最近更新 更多