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

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

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

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

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

【问题讨论】:

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

标签: c++ inline standards-compliance


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在 gcc 中你可以使用

      -finline-limit=n
      -fno-inline
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-09
          • 2018-04-09
          • 1970-01-01
          • 2015-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-15
          相关资源
          最近更新 更多