从我很久以前读到的内容看来,如果你想在编译阶段内联类成员函数,那么函数必须在类声明块中定义.
但这有一个细节泄漏的缺点.恕我直言,其他程序员在打开.h文件时应该只看到类接口.
在现代C++中,第一个陈述是否仍然如此,是吗?有没有办法强制内联声明的函数,最好是在另一个文件中?
将短成员函数保留在类声明块中通常更好吗?
看来如果你想在编译阶段内联类成员函数,那么必须在类声明块中定义该函数.
那不是真的.这是一个函数定义的类中定义的隐含地标记为inline.但是您不需要在类中定义函数inline,您可以显式请求它:
struct X {
void f();
};
inline void f() {}
Run Code Online (Sandbox Code Playgroud)
在inline另一方面关键字,并不意味着该功能将被内联,而是它可以定义在多个翻译单位,即如果多个翻译单位包括包含定义相同的标题,链接器将不会失败具有多重定义错误.
现在,在实际内联中,编译器可以决定内联或不内联任何函数,无论函数是否被声明为inline它看到该函数的定义(它将内联的代码),这就是为什么一般应该在标题中定义要内联的函数(在类定义内部或标记为inline外部.
此外,较新的工具链可以执行整个程序优化或其他链接时间优化,通过这些优化,链接器也可以决定应该内联函数.在这种情况下,函数定义不需要在调用站点可见,因此可以在.cpp文件中定义.但是如果你真的想要内联函数,最好不要依赖这个功能,只需在头文件中定义函数即可.