Я наткнулся на файл заголовка, который включает в себя различные объявления прототипов функций, которые являются встроенными и const:
inline bool Foo1() const;
inline bool Foo2() const;
inline bool Foo3() const;
...
Я понимаю что в соответствии Ключевое слово позволяет компилятору (потенциально) расширять функцию при ее вызове, но почему бы не включить тело функции?
Для меня было бы больше смысла, если бы определение было включено в заголовочный файл:
inline bool Foo1() const { return m_Foo1; };
inline bool Foo2() const { return m_Foo2; };
inline bool Foo3() const { return m_Foo3; };
...
Какой смысл использовать inline на прототипе?
Возможно, это была просто ошибка, но, скорее всего, программист хотел сделать функцию встроенной, но не хотел загромождать эту часть файла реализациями этих функций. Это довольно распространенный шаблон при написании кода «только заголовок». У вас есть обычный заголовочный файл без (или нескольких) реализаций и другой файл, который включен, но действует как файл реализации и содержит все реализации.
Это просто позволяет компактно отображать интерфейс класса.
Определения функций существуют позже в модуле компиляции (до их вызова, если они называются)
От Доктор Доббс:
Либо определение функции, либо прототип функции могут быть объявлены как встроенные. Если прототип функции объявлен как inline, отдельное определение функции должно появиться где-то еще в модуле, если функция вызывается
Есть множество причин.
Единственным ограничением является то, что определение функции должно быть включено в каждую единицу компиляции, которая использует встроенную функцию. В остальном встроенные функции точно такие же, как и обычные функции в том, как они объявлены и определены.
Поскольку функции, вероятно, находятся в объектных файлах, и разработчик не хочет, чтобы кто-либо видел исходный код.