我已经知道,当我将成员函数的定义放入标头并将函数标记为 时,函数中inline
的代码会内联到从 .cpp 文件中调用函数的任何位置,所以当涉及到一个已编译的二进制文件,我知道函数代码的位置——在任何依赖它的 .cpp 文件的编译代码中。但是如果我不在标头中标记函数会发生什么inline
并且函数体大到足以让编译器选择不内联它?在函数的类所属的静态/动态库的上下文中,函数的代码编译到哪里?或者它根本没有编译,函数代码的最终目的地是库客户端的已编译 .cpp?如果是后一种情况,即使我没有用它标记函数的代码是否仍然被内联inline
(因为它的代码太“重”)?最后,MSVC 编译器在这种情况下的行为是否与 GCC 不同?
当然,我意识到将要内联的成员函数放入 .h 文件(或 .inl 文件)并将“重”函数放入 .cpp 文件会使事情变得一目了然,但我真的很想避免破坏一个类'跨文件实现,因此很有趣。