有没有一种快速的方法可以将类的所有静态成员归零?

Posted

技术标签:

【中文标题】有没有一种快速的方法可以将类的所有静态成员归零?【英文标题】:Is there a quick way to zero all the static members of a class? 【发布时间】:2020-05-14 16:30:54 【问题描述】:

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

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 循环中简单地创建整个变量,而不是在每次循环迭代时重置它。 【参考方案1】:

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

class Stats

    static inline struct 
        int counter1, counter2;
        float time;
     data;

    static void resetStats() 
    
        data = ;
    

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

每个循环都会重置为零

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

【讨论】:

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

以上是关于有没有一种快速的方法可以将类的所有静态成员归零?的主要内容,如果未能解决你的问题,请参考以下文章

10.25下午 静态

当不需要创建多个对象时,是不是应该将类的成员变为静态?

同一线程中类的所有实例中的类的共享数据成员

Python类的成员

提升js编写能力

java 关键字