【问题标题】:How to make a function inline in C++如何在 C++ 中使函数内联
【发布时间】:2019-06-11 05:54:19
【问题描述】:

要使函数内联,我应该在函数原型或函数定义中添加关键字 inline 还是应该在函数声明和函数定义中都添加 inline 关键字。

【问题讨论】:

  • 请注意inline 关键字只是一个提示。编译器可以随意忽略它。并且还可以免费编译not标记为inline的函数作为内联函数。
  • 至于你的问题,如果编译器只有一个函数的声明,那么无论你是否使用inline关键字,它通常都无法内联它。需要函数的定义(实现)才能内联它。
  • @Someprogrammerdude 使用inline 关键字在现代编译器中内联函数有意义吗?还是应该让编译器在大多数时候为我们做决定?
  • 为您认为适合内联的定义添加关键字并没有什么坏处。另请注意,在类定义中定义的成员函数自动为inline,即使您不添加关键字。
  • @Ayxan 你在这里没有太多选择。

标签: c++ inline-functions


【解决方案1】:

如果您已经有声明和定义,则无需在任何地方添加inline。 inline 关键字不是一个神奇的优化咒语,而更像是一个链接说明符。

必须在使用它的每个翻译单元中定义内联函数。如何在其中定义它?很简单,放在header里:

// foo.h
inline void foo() {}

但是等等,我听到你说,将它放在标题中不会导致多重定义错误吗?不是当它被标记为内联时,这就是为什么我称它为链接说明符。 inline 说明符告诉编译器它看到的所有这些多重定义都是相同的。所以它实际上可能使用其中任何一个。或者它可能会检查函数体并选择进行代码内联,但它不是必须的。

关键字的主要目的是允许这些多个定义内联出现,而不是导致函数的代码内联。同样,如果您在 cpp 文件中有定义并在标头中有声明,则无需执行任何操作。如果您想在标题中显示一个实用程序,请将其放在那里 - 定义和所有 - 并添加 inline 关键字。

【讨论】:

    【解决方案2】:

    如何使函数内联:

    要将任何函数设为内联,请以关键字“inline”开始其定义。

    来自article。

    【讨论】:

    • 函数声明中的关键字 inline 可以省略吗
    • 不,但是正如@Some程序员老兄提到的那样,仅提及关键字 inline 并不能使其内联,因为它取决于函数代码是否包含迭代、递归等
    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多