在阅读这个问题的一些答案时,我开始想知道为什么编译器在第一次遇到函数时确实需要知道它。在解析收集其中声明的所有符号的编译单元时添加一个额外的通道不是很简单,以便声明和使用它们的顺序不再重要吗?
有人可能会争辩说,在使用函数之前声明它们肯定是一种很好的风格,但我想知道,在 C++ 中这是强制性的还有其他原因吗?
编辑 - 一个示例来说明:假设您必须在头文件中内联定义函数。这两个函数相互调用(可能是递归树遍历,树的奇数层和偶数层的处理方式不同)。解决此问题的唯一方法是在另一个函数之前对其中一个函数进行前向声明。
一个更常见的示例(尽管是类,而不是函数)是具有private
构造函数和工厂的类的情况。工厂需要知道类才能创建它的实例,而类需要知道工厂才能进行friend
声明。
如果这是过去的要求,为什么在某个时候没有删除它?它不会破坏现有的代码,不是吗?