有没有一种快速的方法可以将类的所有静态成员归零?
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 取决于。没有足够的细节来设计解决方案。以上是关于有没有一种快速的方法可以将类的所有静态成员归零?的主要内容,如果未能解决你的问题,请参考以下文章