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

“内联”功能的实用性

c++
  •  4
  • StackedCrooked  · 技术社区  · 14 年前

    内联有两个方面:

    • 这个 inline 如果编译器确定函数不能内联,则将忽略关键字。
    • 有一个编译器优化(在Visual Studio上,我不知道gcc),它告诉编译器在可能的情况下内联所有函数。

    由此我得出的结论是,我不需要为内衬而费心。我只需要为发布版本打开编译器优化。

    或者,在任何情况下,手动内联都是首选的?

    8 回复  |  直到 14 年前
        1
  •  12
  •   Stack Overflow is garbage    14 年前

    这个 inline 关键字有两个功能:

    • 它是对编译器执行内联优化的提示(这在现代编译器上基本上是无用的,现代编译器使用或不使用关键字进行内联)。
    • 它告诉编译器/链接器忽略一个定义规则: 内联的 'd符号可以用多个翻译单位定义(通常因为它是在包含在多个文件中的头文件中定义的)。通常,这会导致链接器错误,但在使用 内联的 关键字。
        2
  •  7
  •   anon    14 年前

    是的,如果要将函数放在头文件中,并将该文件包含在多个翻译单元中。这实际上是 inline 在C++中。

        3
  •  1
  •   Greg D    14 年前

    手动使用 inline 可能对较旧的编译器或不太复杂的编译器(如用于嵌入式开发的编译器)有用。如果您使用的是Visual Studio,我认为您通常不需要使用 内联的 关键字全部。

        4
  •  1
  •   BatchyX    14 年前

    如果希望能够从库中内联函数,那么inline也很有用。只有将函数的代码放入头文件(需要内联)中,编译器才能内联函数。当然,编译器仍然在考虑是否内联函数。

        5
  •  1
  •   mip    14 年前

    有副作用 inline 创建共享库时使用关键字。内联函数既不导出到符号表中,也不导出到库的二进制文件中。因此 内联的 关键字在共享库方面至关重要,因为编译器无法内联导出的函数。另一方面,库的内联函数将始终是内联的,因为它不以库的二进制形式存在。

        6
  •  0
  •   matt-dot-net    14 年前

    您可能不想在任何可能的地方进行内联。这可能会使二进制文件的大小增加太多。您可以选择一些不太常用的函数,这样内联就可以在不显著增加位大小的情况下更快地运行。

        7
  •  0
  •   Mattias Nilsson    14 年前

    这取决于你的环境和你想做什么,所以很难说什么时候可以选择内联。

    这个 link 有一些关于内联的有趣的阅读。还有一些合理的建议(可以归结为:避免这样做)

        8
  •  0
  •   Loki Astari    14 年前

    阅读在线上的Herb Sutters评论:
    http://www.gotw.ca/gotw/033.htm