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

Do I have to repeat the inlined keyword on function implementation

本文关键字:关键字 函数 实现      更新时间:2023-10-16

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


// File.h
inline bool foo()
#include "File.hpp"

// File.hpp
inline bool foo()
{
    return 1;
}

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

我真的不想这么做,因为它有很多函数,而且我的编译器没有抱怨,我想知道编译器是否仍然接受内联提示。

有人知道吗?

我倾向于将inline放在离接口尽可能远的地方,因为它是一个实现细节,而不是接口的一部分。因此:省略声明中的第一个inline。并且只将其附加到函数定义中。对于hpp编译器的包含,作用域与内联无关,因为文件被视为连接文件。另请参阅http://www.parashift.com/c++-faq/where-to-put-inline-keyword.html获取更详细的解释。

这没关系,但将inline放在源文件中就更少了的提示,因为其他翻译单元通常看不到源。如果在头之外实现函数,编译器可能无论如何都无法内联它。

在我看来,inline的唯一实际用途是防止对标头中定义的函数进行多重定义。