2024年2月

C++ 的 inline 到底是什么

https://www.zhihu.com/question/24185638

简单复述一下

在c++中,inline关键词,从一开始就代表一个符号(函数、类)在多个编译单元(源文件)中可以被多次定义,且最终保留一个定义(static是保留多份定义)。其在c++17中,也可以被应用于变量上。

大多数编译器会自己计算内联(代码展开)的效率,进而编译出合适的二进制文件。如果需要手动指定内联,通常需要使用编译器提供的额外控制,比如__force_inline_或者类似的其他东西。但是通常来说,把内联交给编译器自己决定,会得到比手动指定更好的结果

出现这个问题的可能原因是c99引入了含有内联语义的inline关键词(但是c编译器仍然不会保证实现函数内联,但是其仍具有让多个定义只保留一份的能力(这个是肯定的)),导致后面的认知持续出现偏差。