我想提供静态辅助函数来处理类的数据类型。我考虑过将它们包括在类里面。它们是为每个新类实例实例化还是只实例化一次?
最佳答案
函数不是“实例化的”(除非它们是函数模板)。
类被实例化,类的实例是对象。每个对象都占用内存空间,但函数只是过程,是编译器一次性生成的代码片段,不会在每次实例化新对象时都为它们分配内存空间。
函数可以隐式地作用于一个类的实例(如果该函数是一个成员函数),但这只是通过将一个隐式指针传递给它们所作用的对象来完成的。因此,即使在成员函数的情况下,无论是static
还是非static
,都不会增加代码片段1。
如果您想问static
函数是否只生成一段代码,而不是几段单独的代码,那么答案是“是”;但对于成员函数,答案是相同的。
1 实际上,virtual
成员函数确实需要为至少具有一个成员 virtual
函数的类的每个实例存储一个额外的指针(这个指针将指向所谓的 vtable)。但是,static
函数不能是virtual
,因此这不适用于您在问题中考虑的情况。
关于c++ - 静态成员函数会增加类的开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838039/