c++ - 静态成员函数会增加类的开销吗?

标签 c++ inheritance methods static

我想提供静态辅助函数来处理类的数据类型。我考虑过将它们包括在类里面。它们是为每个新类实例实例化还是只实例化一次?

最佳答案

函数不是“实例化的”(除非它们是函数模板)。

被实例化,类的实例是对象。每个对象都占用内存空间,但函数只是过程,是编译器一次性生成的代码片段,不会在每次实例化新对象时都为它们分配内存空间。

函数可以隐式地作用于一个类的实例(如果该函数是一个成员函数),但这只是通过将一个隐式指针传递给它们所作用的对象来完成的。因此,即使在成员函数的情况下,无论是static 还是非static,都不会增加代码片段1

如果您想问static 函数是否只生成一段代码,而不是几段单独的代码,那么答案是“”;但对于成员函数,答案是相同的。

1 实际上,virtual 成员函数确实需要为至少具有一个成员 virtual 函数的类的每个实例存储一个额外的指针(这个指针将指向所谓的 vtable)。但是,static 函数不能是virtual,因此这不适用于您在问题中考虑的情况。

关于c++ - 静态成员函数会增加类的开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838039/

相关文章:

java - 卡片组,继承问题?

c# - 重铸为派生类型

vb.net - "obj.X"VB.net 的术语正确吗?

c++ - 如何在客户端获取 GameplayAbility 属性的增量值(属性值更改后)?

c++ - 避免迭代器在 vector 迭代期间失效

c# - C# 中的向下转型

methods - 普通 lisp 中的匿名方法

Java作业-从我的计算中得到一些奇怪的值

c++ - 与 CUDA 库链接时无法在 Qt Creator 下调试 cpp 代码

c++ - FireBreath Mac OS X 基金会