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

时间:2014-05-26 08:32:22

标签: c++ inline

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

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

3 个答案:

答案 0 :(得分:2)

conststaticauto(等)的多种用法进行比较

C ++委员会对保留新关键词过敏。

答案 1 :(得分:1)

从技术上讲,我认为它实际上并没有改变ODR - 你只应该提供一个定义(这个定义可以多次发生,但它应该是相同的)。我有点懒得查阅规范的确切内容,但我记得之前关于这个主题的讨论“你不能在其他地方有不同的声明”(换句话说,实际的代码本身应该是每次都一样)。

至于原因:因为原始用法仍然是inline打算使用的 - 这些日子的编译器很聪明,可以弄清楚什么时候这是一个好主意,何时不是一个好主意,实际上内联函数。

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

答案 2 :(得分:0)

  

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

从形式上讲,当你inline一个函数时,没有任何外在联系的因素,因此它也会使函数联系起来(副作用)。

  

为什么两个

使用相同的关键字

这是副作用接管主线情景的典型情况,即今天inline只是程序员对函数的看法,编译器对实际内联调用有最终决定权;但是,在头文件中定义函数时,使用更多的是使函数具有内部链接。

请参阅herehere