2012-07-17 48 views
6

我总是尽量保持实现的头之外,因此对于模板和内联函数,我通常会做这样的事情我必须重申对函数实现内联关键字


// File.h 
inline bool foo() 

#include "File.hpp" 

// File.hpp 

inline bool foo() 
{ 
    return 1; 
} 

我的问题是,什么C++规范必须说重复实际的函数实现inline关键字? (如这个例子所示)

我不想这么做,因为它会让很多很多函数变得混乱,而我的编译器不会抱怨,我不知道编译器是否仍然接受内联提示。

有人知道吗?

+0

是否已弃用? – agibalov 2012-07-17 13:41:48

+2

有点偏离主题,但你不应该真正依赖_inline_关键字,因为自从优化以来,一个内联函数可能不是一个,而一个“正常”函数可能实际上被视为一个内联函数。 – SingerOfTheFall 2012-07-17 13:42:30

+1

我知道它只是一个暗示,是的 – Tomas 2012-07-17 13:43:37

回答

4

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

4

没关系,但inline放在源文件中是甚至更​​少的提示,因为源通常对其他翻译单元不可见。如果你在头部之外实现该函数,编译器可能无法将其内联。

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

+0

我没有把它放在一个源文件中,我把它放在一个我在头文件中导入的文件中,基本上只是将它放在该头文件的末尾 – Tomas 2012-07-17 13:44:31

+0

难以一个足够聪明的编译器内联函数无论如何,在链接时间? – millimoose 2012-07-17 13:45:43

+0

我真的不太确定。有人知道这有多常见吗? – Tomas 2012-07-17 13:49:23

相关问题