如何在 C++ 中定义内联自由函数(非成员函数)?

How to define an inline free function (non member function) in C++?

在C++中,我需要定义一些内联通用函数。 但是,当我在头文件中编写原型并在 a.cpp 文件中编写实现时,我遇到了 "LNK2001 unresolved external symbol" 错误。

要不要去掉.cpp文件,在头文件中实现函数?

我正在尝试定义一些可供其他 类 使用的共享非成员数学函数。

Header file:

inline void foo()
{
    //some code
}

.cpp file

//nothing

如果您希望函数成为 in-line,则必须在 header 中提供定义。如果你把它放在一个单独的 cpp 文件中,它就不会是 in-lined。 link 错误通常是由于在 linking 阶段没有包含 cpp 文件。

inline 说明符的名称有些误导,因为它暗示函数是内联的。但是,inline 首先指定了函数的 链接 (这也是对编译器考虑内联的提示)。对于声明为 inline 的函数,编译对象中不会生成任何可链接符号。

因此,inline 函数只有在头文件中 定义 (不仅仅是声明)时才有意义,该头文件可能包含在许多编译单元中。 inline 说明符会阻止编译器在相应的目标文件中为该函数发出多个(实际上是 any)符号。

如果你只需要一个编译单元一次的小函数,你不需要在其他地方声明它。而且,你不需要将它声明为内联,而是将它放在匿名命名空间中以防止它可见(在生成的目标文件中)。

所以,要么(这很可能是您的用例)

// foo.hpp:
inline void foo(bar x) { /* ... */ }  // full definition

// application.cpp:
#include "header.hpp"

/* ... */ foo();

// application.cpp:
namespace {
    inline void foo(bar x)   // inline specifier redundant
    { /* ... */ }
}

/* ... */ foo();