C++内联函数原型

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

使用原型上的内联的目的是什么?

谢谢,tacp。我在发布问题之前确实看到了这个问题,但我更想知道在原型中使用内联的目的,而不是使用内联与原型相比。 - Kirby
4个回答

3

可能只是一个错误,但更有可能的是程序员想将函数设置为内联函数,但不想在文件的这部分混杂这些函数的实现。在编写“仅头”代码时,这是一个相当常见的模式。您有一个普通的头文件,没有(或很少)实现,还有另一个被包含但像实现文件一样的文件,包含所有实现。


2

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

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

来自Dr. Dobb's:

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


1

有许多原因。

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

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


0

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


内联函数必须在调用它的同一文件(编译单元)中定义。因此,内联函数通常在头文件中定义。因此,我认为您的文件不能调用位于对象文件中的内联函数。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接