c++ - 为什么在 C++ 中可以在头文件中定义成员函数而不是自由函数?

标签 c++

假设我有三个文件 A.cppB.cppB.hA.cppB.cpp 都包含 B.h。我在 B.h 中定义了一个自由函数(无论出于何种原因)。然后我得到一个链接器错误:

ld: 1 duplicate symbol for architecture x86_64

这是有道理的。编译器将A.cppB.cpp分开编译,所以有两个同名同参数的函数。

但是,如果我在 B.h 中声明一个类并在该类中定义一个成员函数,则它编译得很好。这是为什么?那不应该创建相同的链接器错误吗?

最佳答案

Why is it ok in C++ to define a member function in a header but not a free function?

不能多次定义非内联函数。这是“一个定义规则”的一部分。

可以在多个翻译单元中定义内联函数。事实上,内联函数必须在使用它们的每个翻译单元中定义。

头文件通常包含在多个翻译单元中。因此,在 header 中定义的所有函数都应该是内联函数。

在类定义中定义的成员函数是隐式内联的。作为内联函数,可以在头文件中定义它们,就像在头文件中定义内联非成员函数一样。同样,在头文件中定义非内联成员函数也不行,就像在头文件中定义非内联非成员函数一样。

关于c++ - 为什么在 C++ 中可以在头文件中定义成员函数而不是自由函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67286472/

相关文章:

c++ - 如何正确访问打包结构成员

c++ - 为什么内存_order_release直到C++20才支持?

c++ - 在多个线程中使用 std::cout

c++ - 访问屏幕尺寸的 Objective C 运行时

C++ 重载宏

c++ - 这是 Klocwork 的误报吗

静态方法的 C++ 链接器问题

c++ - C++中运算符重载的返回值

c++ - 将 Autotools 用于新的共享库

c++ - 是否可以将二进制文件存储在 exe 中