我是否必须在函数实现上重复内联关键字

时间:2012-07-17 13:38:03

标签: c++ inlining

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


// File.h
inline bool foo()

#include "File.hpp"

// File.hpp

inline bool foo()
{
    return 1;
}

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

我真的不想那样做,因为它弄乱了很多很多函数,虽然我的编译器没有抱怨,但我想知道编译器是否仍然接受内联提示。

有人知道吗?

2 个答案:

答案 0 :(得分:4)

没关系,但将inline放在源文件中甚至更少一个提示,因为其他翻译单元通常不会看到这些来源。如果在头部之外实现该功能,编译器可能无法进行内联。

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

答案 1 :(得分:4)

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

相关问题