【问题标题】:Must the definition of a C++ inline functions be in the same file?C++ 内联函数的定义必须在同一个文件中吗?
【发布时间】:2012-02-18 03:07:26
【问题描述】:

我在名为ex.h 的头文件中定义了一个内联函数show(),并在ex.cpp 中定义了该函数。我预计这会给我一个错误,因为编译器将不知道在调用 show() 函数的位置替换什么。但是因为我使用的是 IDE,所以效果很好。怎么会这样?

顺便说一句,当我尝试手动编译它时,它给了我一个错误,即 show() 已使用但未定义。

【问题讨论】:

    标签: c++ function compiler-construction inline


    【解决方案1】:

    必须将函数的定义({...} 之间的部分)放在头文件中,除非该函数仅在单个 .cpp 文件中使用。
    特别是,如果您将内联函数的定义放入.cpp 文件并从其他.cpp 文件中调用它,您将收到来自链接器的"unresolved external" 错误。

    [read more]

    【讨论】:

      【解决方案2】:

      我们通常将内联函数放在头文件中,这样编译器在编译使用该函数的代码时可以看到定义。这样它就适用于所有编译器。

      一些编译器具有一次性优化整个程序的功能(Whole program optimizationLink time optimization)。这些编译器可以内联一个函数,即使它是在不同的 .cpp 文件中定义的。

      【讨论】:

        【解决方案3】:

        通常整个内联函数都存在于 .h 原因是编译器必须预先查看整个内联定义。内联函数是通过直接“粘贴”发出的机器语言来编译的。

        【讨论】:

          猜你喜欢
          • 2011-03-10
          • 1970-01-01
          • 2021-11-17
          • 1970-01-01
          • 1970-01-01
          • 2012-01-17
          • 1970-01-01
          • 2014-12-21
          • 1970-01-01
          相关资源
          最近更新 更多