内联成员函数(函数体内联)和其他普通成员函数(函数体在单独的.cpp文件中)有什么区别吗?
例如,
class A
{
void member(){}
};
and
// Header file (.hpp)
class B
{
void member();
};
// Implementation file (.cpp)
void B::member(){}
绝对没有区别。
两者之间的唯一区别是类内的成员被隐式标记为内联。但这没有任何实际意义。
See: 内联和良好实践
文档说内联标记是向编译器(由开发人员)提示应该内联方法。所有现代编译器都会忽略此提示,并使用自己的内部启发式方法来确定何时应内联方法(因为人类是出了名的糟糕并做出此决定)。
内联的另一个用途是它告诉链接器它可能期望看到一个方法的多个定义。当函数定义位于头文件中时,获取头文件的每个编译单元都会有该函数的定义(假设它不是内联的)。通常这会导致链接器生成错误。通过内联标记,编译器可以理解为什么有多个定义,并将从应用程序中删除除一个定义之外的所有定义。
关于内联进程的注意事项:方法不需要在头文件中才能内联。现代编译器有一个完整的应用程序优化过程,其中所有函数都可以考虑内联,即使它们是在不同的编译单元中编译的。由于内联标志通常被忽略,因此如果将该方法放入标头或源文件中,则没有什么区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)