我遇到了一个头文件,其中包含各种函数原型声明,这些声明是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; };
...
在原型上使用内联有什么意义?
答案 0 :(得分:3)
这可能只是一个错误,但很可能程序员想要使函数内联,但不希望使用这些函数的实现来混淆文件的那一部分。在编写“仅标题”代码时,这是一种相当常见的模式。你有一个没有(或很少)实现的普通头文件和另一个包含的文件,但它就像一个实现文件,包含所有的实现。
答案 1 :(得分:2)
它只是简单地允许类接口显示。
函数定义稍后会出现在编译单元中(在它们被调用之前,如果它们被调用)
来自Dr. Dobb's:
函数定义或函数原型可以内联声明。如果函数原型是内联声明的,那么如果函数被调用,函数的单独定义必须出现在模块的其他位置
答案 2 :(得分:1)
有很多原因。
唯一的限制是函数定义必须包含在使用内联函数的每个编译单元中。否则内联函数与普通函数的声明和定义方式完全相同。
答案 3 :(得分:0)
因为这些函数可能在目标文件中,开发人员不希望任何人看到源代码。