C ++内联函数原型

时间:2013-04-10 23:17:14

标签: c++ prototype inline-functions

我遇到了一个头文件,其中包含各种函数原型声明,这些声明是inline和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; };
...

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

它只是简单地允许类接口显示。

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

来自Dr. Dobb's

  

函数定义或函数原型可以内联声明。如果函数原型是内联声明的,那么如果函数被调用,函数的单独定义必须出现在模块的其他位置

答案 2 :(得分:1)

有很多原因。

  1. 您需要空函数声明来解决一个函数调用另一个函数的依赖性问题。
  2. 出于文体方面的原因。
  3. 唯一的限制是函数定义必须包含在使用内联函数的每个编译单元中。否则内联函数与普通函数的声明和定义方式完全相同。

答案 3 :(得分:0)

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