c++内联函数原型

C++ Inline Function Prototypes

本文关键字:原型 函数 c++      更新时间:2023-10-16

我遇到了一个头文件,其中包括各种内联和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; };
...

在原型上使用内联的意义是什么?

这可能只是一个错误,但最可能的是程序员想使函数内联,但不想让这些函数的实现使文件的那部分混乱。在编写"仅标头"代码时,这是一种相当常见的模式。您有一个没有(或很少)实现的普通头文件和另一个包含的文件,但其行为类似于实现文件并包含所有实现。

它只是允许一个类接口紧凑地显示。

函数定义稍后存在于编译单元中(在调用它们之前,如果调用,则)

来自Dr. Dobb's:

函数定义或函数原型都可以内联声明。如果函数原型是内联声明的,如果函数被调用

,则该函数的单独定义必须出现在模块的其他地方。

原因有很多。

  1. 你需要空函数声明来解决一个函数调用另一个函数的依赖问题。
  2. 由于风格原因。

唯一的约束是函数定义必须包含在使用内联函数的每个编译单元中。否则,内联函数在声明和定义方式上与普通函数完全相同。

因为函数可能在目标文件中,开发人员不希望任何人看到源代码。