2013-04-10 63 views
4

予跨越包括各种函数原型声明其是内联和const头文件传来:C++内联函数原型

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; }; 
... 

什么是使用的原型内嵌的意义呢?

+0

谢谢,tacp。实际上,在发布之前我确实看到了这个问题,但我主要关心在原型中使用内联的目的,而不是使用内联与原型。 – Kirby 2013-04-10 23:27:24

回答

3

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

0

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

+0

否...内联函数必须在调用它的同一个文件(编译单元)中定义。所以内联函数是ususaly在头文件中定义的。所以我认为,你的文件不能调用一个目标文件中的内联函数。 – Sam 2013-11-08 07:28:42

1

有很多原因。

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

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

2

它只是简单地让一个类接口紧凑地显示。

以后存在于编译单元的功能定义(被称为前它们,如果他们被称为)

Dr. Dobb's

要么函数定义或函数原型可以声明一致。如果一个函数原型声明为inline,函数的一个单独的定义必须在其他地方出现的模块中,如果被调用的函数