内联关键字的两种不同效果之间的关系是什么?

What is the relation between the two different effects of the inline keyword?

本文关键字:之间 关系 是什么 关键字 两种      更新时间:2023-10-16

其中一个是"优化"效应,另一个是与ODR相关的效应。

对我来说,这两个似乎是完全不相关的事情,所以我很难理解为什么相同的关键字用于两者

const, staticauto (et al)的多种用途比较

c++委员会对保留新关键字非常反感。

从技术上讲,我不认为它实际上改变了ODR—您只应该提供一个定义(这个定义可以出现多次,但应该是相同的)。我有点懒得去查找规范的确切单词,但是我记得在之前关于这个主题的讨论中,"您不能在其他地方有不同的声明"(换句话说,实际的代码本身每次都应该是相同的)。

至于为什么:因为最初的用法仍然是inline的意图-只是编译器现在足够聪明,可以找出什么时候它是一个好主意,什么时候它不是一个好主意,实际上内联一个函数

关键是我们需要某种方式来告诉编译器和链接器"这个函数是同一个函数,即使你多次看到它"。我们可以发明一个新的关键字,但是编译器使用的关键字越多,作为程序员的我们可用的单词就越少。当然,旧的代码仍然会使用旧的关键字,所以它仍然需要支持。我看不出添加一个与现有关键字相同的新关键字有多大好处。

内联关键字的两种不同效果之间的关系是什么?

在正式意义上,当你inline一个函数时,它没有外部链接的意义,因此它也使函数链接成为内部的(副作用)。

为什么两个

使用相同的关键字

这是一个典型的副作用接管主线场景的情况,即今天inline只是程序员对函数的意见,编译器对实际内联调用有最终决定权;然而,当在头文件中定义函数时,它的用法更倾向于使函数具有内部链接。