Так что в этой другой старой огромной кодовой базе 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;
{
...;
}
Компиляторы C эпохи 1990-х, даже если бы они поддерживали прототипы, не выводили бы прототип из определения функции «старого стиля» в пользу кода, расположенного ниже в том же файле, так что вы довольно регулярно видели бы такую конструкцию в коде предназначен для компиляции как со стандартными, так и со старыми компиляторами.
Теперь представьте, что в какой-то момент между тем и теперь кто-то механически преобразовал все определения функций старого стиля в определения-прототипы, а кто-то еще механически преобразовал C в C ++, и результат вполне может выглядеть так, как у вас.
Ведущая декларация больше не имеет смысла и может быть безопасно удалена.
Я думаю, что это было ненужным. Функция объявлена, пока она определена. (насколько я знаю)