Liccsu 在 重新认识C++的inline关键字 中发帖
前言
一些教程和文章里对C++中的inline关键字的说明是这样的:用来建议编译器对被修饰的函数进行内联展开优化。包括我自己也在初学C++的很长一段时间里也是这么认为的,这大概是从C语言转到C++带来的“遗留问题”。而实际上自C++98起,inline关键字的作用就已经从“优先内联”变成了“允许多次定义”。因为内联替换在标准语义中是不可观察的,现代编译器几乎不会参考函数声明中的inline修饰符来决定是否内联,编译器拥有对任何非标记为inline的函数进行内联替换的自由,也拥有对任何标记为inline的函数生成函数调用的自由,它自有决断,没有哪个符合标准的主流编译器能保证一定内联或者一定不内联~~(至少我没见过)~~。既然如此,那不如让inline关键字在其他地方发光发热好了,于是自C++98起,inline关键字对函数的作用变为“允许多次定义”,自C++11起,增加对命名空间的修饰,自C...