代码之家  ›  专栏  ›  技术社区  ›  mans

有没有什么方法可以在不使用内联[duplicate]的情况下停止多重翻译

  •  0
  • mans  · 技术社区  · 5 年前

    我应该什么时候写关键词 inline 对于C++中的函数/方法?

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

    • 我应该什么时候 为C++中的函数/方法编写关键字“内联”?

    • 申请是否成功有关系吗 多线程 当一个人为一个函数/方法写“inline”时?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Oğuzhan Türk    2 年前

    天哪,我最讨厌的一个。

    inline static extern 外人 , 内联

    据说 内联 提示编译器您认为函数应该内联。1998年可能是这样,但十年后,编译器不需要这样的提示。更不用说人类在优化代码时通常是错误的,所以大多数编译器完全忽略了“提示”。

    • 静止的 -变量/函数名不能用于其他转换单元。链接器需要确保不会意外使用另一个翻译单元的静态定义变量/函数。

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

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

    注: 内联 内联 已经然而,模板的显式专门化和实例化 require inline 供使用。


    对您的问题的具体回答:

    • 仅当您希望在标题中定义函数时。更确切地说,只有当函数的定义可以在多个翻译单元中显示时。在头文件中定义小函数(如在一行程序中)是一个好主意,因为它在优化代码时为编译器提供了更多信息。它还增加了编译时间。

    • 什么时候我不应该为C++中的函数/方法写关键字“内联”?

    • 编译器什么时候不知道什么时候让函数/方法“内联”呢?

      一般来说,编译器会比您做得更好。但是,如果没有函数定义,编译器就不能选择内联代码。在最大优化的代码中,通常所有 private

      __attribute__(( noinline )) __declspec(noinline)

    • 当为函数/方法编写“内联”时,应用程序是否是多线程的,这有关系吗?

      多线程不会以任何方式影响内联。