在 C++ 中,方法是否仅在显式声明 inline
(或在头文件中定义)时才被内联,还是允许编译器在他们认为合适的情况下内联方法?
最佳答案
inline 关键字实际上只是告诉链接器(或告诉编译器告诉链接器)同一函数的多个相同定义不是错误。如果要在 header 中定义函数,则需要它,或者如果 header 包含在多个编译单元中,则链接器会出现“多重定义”错误。
选择 inline 作为关键字的理由似乎是人们想要在 header 中定义(非模板)函数的唯一原因是它可以被编译器内联.编译器不能内联函数调用,除非它具有完整的定义。如果函数没有在头文件中定义,编译器只有声明,不能内联函数,即使它想内联。
现在,我听说,优化代码的不仅是编译器,链接器也可以做到这一点。即使函数没有在同一个编译单元中定义,链接器也可以(如果他们还没有这样做的话)内联函数调用。
如果在头文件中定义大于单行的函数可能不是一个好主意(不利于编译时间,如果内联大函数,可能会导致臃肿和性能下降)。
关于c++ - 编译器何时内联 C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443982/