I asked why private functions had to be declared at all, as they don’t add anything (neither object size nor vtable entry) for other translation units to know
如果你考虑它,这类似于在文件中声明一些静态函数。它从外部不可见,但它对编译器本身很重要。编译器想知道函数的签名,然后才能使用它。这就是为什么你首先声明函数。记住,C编译器是一个通过,这意味着一切都必须在它被使用之前声明
从程序员的角度来看,声明私有函数仍然没有完全无用。想象2类,其中一个是另一个的朋友。友好的class2需要知道该类的私有如何,(这个讨论变得怪异)否则他们不能使用它。
至于为什么C是这样设计的,我首先说,有历史的原因:事实上,你不能在C中切割一个结构,C被采纳,因此你不能切割一个类(并采用其他语言从C分支)。我也猜想它是关于简单性:想象一下,设计一个编译方法有多困难,你可以在不同的头文件之间拆分类,让你的源文件知道它,并阻止其他人添加东西到你的类。
最后一点是,私有函数可以影响vtable大小。也就是说,如果他们是虚拟的。
1实际上不完全。如果在类中有内联函数,它们可以引用稍后在同一类中定义的函数。但可能这个想法从单程传递开始,这个异常后来添加到它。
2它的内联成员函数。