0

C++ ISO 标准说:“在类定义中定义的函数是内联函数。” *

您知道任何忽略此规则的编译器吗?

您是否知道任何不会将“内联建议”放在那里的编译器?

(请不要重复关于内联的理论,我知道 - 我需要一个实用的答案)

4

4 回答 4

1

所有编译器都可以忽略他们决定的任何内联建议。例如,如果他们认为函数太复杂,则不会内联。如果您曾经获取函数的地址,则该函数可能会在某些地方内联,但会在其他地方生成完整的函数以供地址指向。

inline当您在类定义中定义函数作为对编译器的建议时,请考虑隐式内联。

于 2009-03-17T16:17:45.940 回答
1

这不是一个规则,它只是一个事实陈述。该规范只是说明该函数是内联定义的。这使得编译器也更容易实际内联生成的代码,但标准没有任何地方要求这样做。

它们是不同的概念。生成的代码是什么样子仅取决于编译器,标准并没有真正强加任何要求(当然除了它应该按照指定的方式运行)。

于 2009-03-17T16:21:38.457 回答
0

在 gcc 中,您可以使用

-finline-limit=n
-fno-inline
于 2009-03-17T16:19:49.880 回答
0

请参阅我对一个非常相似的问题的回答:“内联”何时无效?(在 C 中)

总结:内联只需要允许多个定义。任何调用更改的函数都是完全可选的。

于 2009-03-17T16:24:22.443 回答