C++ 我必须在函数实现中重复内联关键字吗

C++ 我必须在函数实现中重复内联关键字吗,c++,inlining,C++,Inlining,我总是试图将实现保持在标题之外,所以对于模板和内联函数,我通常会这样做 我的问题是,C++规范对于重复函数的实际实现的内联关键字有什么要说?(如本例所示) 我真的不想这样做,因为它会因为太多太多的函数而变得混乱,虽然我的编译器没有抱怨,但我想知道编译器是否仍然接受内联提示 有人知道吗?没关系,但在源文件中放入内联更不是一个提示,因为其他翻译单位通常看不到源文件。如果在头之外实现该函数,编译器可能无法以任何方式内联它 在我看来,inline的唯一实际用途是防止在标题中定义多个函数。我倾向于将i

我总是试图将实现保持在标题之外,所以对于模板和内联函数,我通常会这样做



我的问题是,C++规范对于重复函数的实际实现的内联关键字有什么要说?(如本例所示)

我真的不想这样做,因为它会因为太多太多的函数而变得混乱,虽然我的编译器没有抱怨,但我想知道编译器是否仍然接受内联提示


有人知道吗?

没关系,但在源文件中放入
内联
更不是一个提示,因为其他翻译单位通常看不到源文件。如果在头之外实现该函数,编译器可能无法以任何方式内联它


在我看来,
inline
的唯一实际用途是防止在标题中定义多个函数。

我倾向于将
inline
放在尽可能远离接口的地方,因为它是一个实现细节,而不是接口的一部分。因此:省略声明中的第一个
inline
。并仅将其附加到函数定义。对于包含hpp编译器,作用域与内联无关,因为文件被视为串联的。
有关更详细的解释,请参见。

有点离题,但您不应该真正依赖内联关键字,因为在优化过程中,内联声明的函数可能不是内联函数,而“正常”函数可能实际被视为内联函数。我知道这只是一个提示,是的,这是一个非常固执己见且对C++怀有敌意的源代码:它基本上声称
inline
关键字主要用于告诉编译器采取一些预防措施以使内联函数成为可能(如果它选择这样做的话)没有多个定义等,这会使关键字比其他任何东西都更像早期C++编译器实现的伪像。我还没有把它放在源文件中,我把它放在一个文件中,我在头文件中导入了它。实际上,仅仅是在头文件的末尾把它塞进,一个足够聪明的编译器在链接时不能内联函数吗?我真的不太确定。有人知道这有多普遍吗?@TomasCokis GCC从大约4.5开始就有LTO,但它的具体功能可能主要是在一堆邮件列表线程中“记录”的。
// File.h
inline bool foo()

#include "File.hpp"
// File.hpp

inline bool foo()
{
    return 1;
}