【问题标题】:C++ Inline Function PrototypesC++ 内联函数原型
【发布时间】:2013-04-10 23:17:13
【问题描述】:

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

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。实际上,我在发布之前确实看到了这个问题,但我主要是好奇在原型中使用 inline 的目的,而不是使用 inline 与原型。

标签: c++ prototype inline-functions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它只是让一个类界面紧凑地显示出来。

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

    来自Dr. Dobb's

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

    【讨论】:

      【解决方案3】:

      有很多原因。

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 否...内联函数必须在调用它的同一文件(编译单元)中定义。所以内联函数通常在头文件中定义。所以我认为,您的文件不能调用目标文件中的内联函数。
        猜你喜欢
        • 2011-12-16
        • 2017-01-05
        • 2011-06-22
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        • 2014-12-24
        • 1970-01-01
        相关资源
        最近更新 更多