是否有任何忽略默认内联函数的 C++ 标准的编译器? [复制]

Posted

技术标签:

【中文标题】是否有任何忽略默认内联函数的 C++ 标准的编译器? [复制]【英文标题】:Are there any compilers that IGNORE C++ standard about default inline functions? [duplicate] 【发布时间】:2010-10-13 21:15:15 【问题描述】:

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

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

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

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

【问题讨论】:

***.com/questions/654452/… 的副本,最近被同一个人询问。 对不起,我想重申我的问题 - 我现在阅读了常见问题解答并将编辑我以前的问题。很抱歉弄得一团糟。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

在 gcc 中你可以使用

-finline-limit=n
-fno-inline

【讨论】:

【参考方案4】:

查看我对一个非常相似的问题的回答:When is "inline" ineffective? (in C)

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

【讨论】:

以上是关于是否有任何忽略默认内联函数的 C++ 标准的编译器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

inline内联函数

lambda 是不是像 C++ 中的函数一样内联?

内联函数分析

内联还有用吗? [复制]

兼容 c++11 的编译器是不是总是忽略内联提示?

是否有任何理由使用 C 而不是 C++ 进行嵌入式开发? [关闭]