gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:12:51 24 4
gpt4 key购买 nike

假设我有三个文件 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com