函数不会被“实例化”(除非它们是函数模板)。类被实例化,类的实例是对象。每个对象都占用内存空间,但函数只是一些过程,编译器一次性生成的代码片段,所以在实例化新对象时不需要为它们分配内存空间。函数可以隐式地在一个类的实例上工作(如果该函数是成员函数),但这只是通过传递指向它们工作的对象的隐式指针来完成的。因此,即使是成员函数(无论是静态的还是非静态的),也没有代码片段的增殖。如果你想问的是是否只为静态函数产生一段代码,而不是几个独立的代码片段,那么答案是“是”,但对于成员函数来说,答案也是一样的。实际上,虚拟成员函数确实需要为至少有一个成员虚拟函数的每个类的实例存储一个额外的指针(这个指针将指向所谓的v表)。但是,静态函数不能是虚拟的,因此这不适用于你在问题中考虑的情况。
不,与 static 成员函数没有关联的每个实例都没有额外的开销。 此外,与任何成员函数都没有每个实例的开销,只有一种例外。这个例外是向一个原本没有虚函数的类添加虚函数; 通常情况下,这会为该类的每个实例添加一个额外的指针。添加更多虚函数将不会产生进一步的每个实例开销。