在方法定义中使用inline关键字可能会导致问题吗?

时间:2011-10-21 21:02:49

标签: c++ c

我在程序的每个方法中使用内联(算法的实现),它是否会产生问题?

2 个答案:

答案 0 :(得分:4)

取决于您的代码是什么样的。

不了解你的代码意味着什么肯定会会导致你出现问题。

为什么不尝试了解inline实际做什么,而不仅仅是它是否会导致任何问题?

C ++中inline关键字的主要作用是使编译器抑制ODR(一个定义规则)。因此,必须在一个翻译单元中定义非inline函数。

必须在每个使用它的翻译中定义inline函数。

因此,根据您定义函数的方式和位置,inline可能是正确。我建议你在使用正确的地方使用它。

答案 1 :(得分:-1)

假设编译器不够智能而无法忽略它,它可能会使编译输出更大并且运行速度更慢。一般来说,如果你有一个特定的目的,你应该只使用'register'或'inline'这样的优化关键字 - 你知道编译器不知道的有用的东西。

在现代CPU上,内联通常是一种悲观而不是优化。这是因为函数的每个副本都必须从内存中获取,对其指令进行解码,并在各种缓存中占用自己的空间 - 特别是分支预测缓存。