C++ ISO 标准说:“在类定义中定义的函数是内联函数。” *
您知道任何忽略此规则的编译器吗?
您是否知道任何不会将“内联建议”放在那里的编译器?
(请不要重复关于内联的理论,我知道 - 我需要一个实用的答案)
C++ ISO 标准说:“在类定义中定义的函数是内联函数。” *
您知道任何忽略此规则的编译器吗?
您是否知道任何不会将“内联建议”放在那里的编译器?
(请不要重复关于内联的理论,我知道 - 我需要一个实用的答案)
所有编译器都可以忽略他们决定的任何内联建议。例如,如果他们认为函数太复杂,则不会内联。如果您曾经获取函数的地址,则该函数可能会在某些地方内联,但会在其他地方生成完整的函数以供地址指向。
inline
当您在类定义中定义函数作为对编译器的建议时,请考虑隐式内联。
这不是一个规则,它只是一个事实陈述。该规范只是说明该函数是内联定义的。这使得编译器也更容易实际内联生成的代码,但标准没有任何地方要求这样做。
它们是不同的概念。生成的代码是什么样子仅取决于编译器,标准并没有真正强加任何要求(当然除了它应该按照指定的方式运行)。
在 gcc 中,您可以使用
-finline-limit=n
-fno-inline
请参阅我对一个非常相似的问题的回答:“内联”何时无效?(在 C 中)
总结:内联只需要允许多个定义。任何调用更改的函数都是完全可选的。