4

我遇到了一个头文件,其中包含内联和常量的各种函数原型声明:

inline bool Foo1() const;
inline bool Foo2() const;
inline bool Foo3() const;
...

我知道inline关键字允许编译器在调用时(可能)扩展函数,但为什么不包括函数体呢?

如果定义包含在头文件中,对我来说会更有意义:

inline bool Foo1() const { return m_Foo1; };
inline bool Foo2() const { return m_Foo2; };
inline bool Foo3() const { return m_Foo3; };
...

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

4

4 回答 4

3

这可能只是一个错误,但很可能程序员想要使函数内联,但不想用这些函数的实现来弄乱文件的那部分。在编写“仅标头”代码时,这是一种相当常见的模式。您有一个没有(或很少)实现的普通头文件和另一个包含但充当实现文件并包含所有实现的文件。

于 2013-04-10T23:28:23.977 回答
2

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

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

来自Dobb 博士的

可以内联声明函数定义或函数原型。如果函数原型被声明为内联,则函数的单独定义必须出现在模块中的其他位置(如果调用该函数)

于 2013-04-10T23:22:41.560 回答
1

有很多原因。

  1. 您需要空函数声明来解决一个函数调用另一个函数的依赖性问题。
  2. 出于文体原因。

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

于 2013-04-10T23:22:29.543 回答
0

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

于 2013-04-10T23:19:17.693 回答