静态成员函数是否会增加类的开销?

dan*_*jar 3 c++ methods inheritance static

我想提供静态帮助函数来处理类的数据类型.我考虑将它们包含在课堂上.它们是为每个新的类实例实例化还是仅实例化一次?

And*_*owl 6

函数不是"实例化"(除非它们是函数模板).

被实例化,的实例是对象.每个对象在内存中占用空间,但函数只是程序,编译器一次性生成的代码片段,并且每次实例化新对象时都不会分配内存中的空间.

函数可以隐式地处理类的实例(如果函数是成员函数),但这只是通过将隐式指针传递给它们所处理的对象来完成的.因此,即使在成员函数的情况下,无论是它们static还是非成员函数,都static没有代码片段1的扩散.

如果你想询问是否只为static函数生成了一段代码,而不是几段独立的代码,那么答案是" "; 但是,对于成员函数,答案是相同的.

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