什么时候应该为函数和方法编写关键字“inline”?

  • 回答 (2)
  • 关注 (0)
  • 查看 (71)

什么时候应该inline在C ++中编写函数/方法的关键字?

看到一些答案后,有一些相关的问题:

  • 什么时候我不应该在C ++中为函数/方法编写关键字'inline'?
  • 编译器什么时候不知道何时做一个函数/方法“内联”?
  • 当为函数/方法写入“内联”时,如果应用程序是多线程的,这是否重要?
小川小川提问于
秋之夕颜清念念不忘,必有回响回答于

事实上,几乎从来没有。你所做的只是建议编译器使内联的给定函数(例如,将所有对这个函数的调用替换掉)。当然没有保证:编译器可能会忽略该指令。

编译器通常会很好地检测+优化这样的事情

akjok54stay hungry stay foolish回答于

inline更像是static或extern不是指令告诉编译器内联你的函数。 extern,static,inline是联动指令,几乎完全是由连接器,而不是编译器使用。

据说inline提示编译器,你认为函数应该内联。这在1998年可能是真的,但十年之后编译器不需要这样的提示。更不用说人类在优化代码方面通常是错误的,所以绝大多数编译器都忽略了'提示'。

static - 变量/函数名称不能在其他编译单元中使用。链接器需要确保它不会意外地从另一个编译单元中使用静态定义的变量/函数。

extern - 在这个编译单元中使用这个变量/函数名,但是如果没有定义就不要抱怨。链接器会对其进行排序,并确保所有试图使用某个外部符号的代码都有其地址。

inline - 这个函数将在多个编译单元中定义,不用担心。链接器需要确保所有编译单元使用变量/函数的单个实例。

注意:通常,声明模板inline是毫无意义的,因为它们的链接语义inline已经是。但是,需要使用explicit模板的专业化和实例化。inline

扫码关注云+社区

领取腾讯云代金券