从我很久以前读到的内容来看,如果您希望在编译阶段内联类成员函数,则该函数必须在类声明块内定义。
但这有一个缺点,那就是细节泄露。恕我直言,其他程序员在打开 .h 文件时应该只看到类接口。
第一个陈述在现代 C++ 中仍然正确吗?有没有办法强制内联声明的函数,最好是在另一个文件中?
通常,将短成员函数保留在类声明块内是否更好?
看来,如果您希望在编译阶段内联类成员函数,则必须在类声明块内定义该函数。
这不是真的。一个函数是defined班级内定义被隐式标记为inline
。但是您不需要在类中定义该函数inline
,您可以明确请求它:
struct X {
void f();
};
inline void f() {}
The inline
另一方面,关键字并不意味着该函数将是inlined,而是它可以是defined在多个翻译单元中,也就是说,如果多个翻译单元包含包含该定义的相同标头,则链接器不会失败并显示多重定义错误.
现在,就实际inlining,编译器可以决定内联或不内联任何函数,无论该函数是否声明为inline
前提是它看到定义该函数(它将内联的代码),这就是为什么一般来说应该内联的函数应该在标头中定义(在类定义内部或标记的内部)inline
外部。
此外,较新的工具链可以执行整个程序优化或其他链接时间优化,链接器还可以通过这些优化来决定应该内联函数。在这种情况下,函数定义不需要visible在调用站点,因此可以在 .cpp 文件中定义它。但如果你真的想要这个功能inlined最好不要依赖此功能,只需在标头中定义该函数即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)