因此,在另一个古老的巨大 C++ 代码库中,我经常发现这种风格:
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
一般来说,我确实理解在 C++ 中前向声明函数的意义何在,但是我找不到这种重复的任何理由。有什么理由不消除它吗?
因此,在另一个古老的巨大 C++ 代码库中,我经常发现这种风格:
// ...
void FooBar::Eggs(int spam);
void FooBar::Eggs(int spam) {
// implementation here
// ...
}
一般来说,我确实理解在 C++ 中前向声明函数的意义何在,但是我找不到这种重复的任何理由。有什么理由不消除它吗?
如果这是一个早于标准 C 的代码库,则该代码最初可能看起来像这样:
#ifdef PROTOTYPES
void FooBar_Eggs(int spam);
#endif
FooBar_Eggs(spam)
int spam;
{
...;
}
1990 年代的 C 编译器,即使它们支持原型,也不会从“旧式”函数定义中推断出原型,以便在同一文件中使用它下面的代码,因此您会经常在代码中看到这种构造旨在使用符合标准的编译器和旧版编译器进行编译。
现在想象一下,从那时到现在,有人机械地将所有旧式函数定义转换为原型定义,而其他人机械地将 C 转换为 C++,结果可能看起来像你所拥有的那样。
前导声明不再有任何作用,可以安全地删除。
我认为这是不必要的。函数在定义时被声明。(我所知道的)