我已阅读现有 answers关于inline的两种含义,我还是一头雾水。
假设我们有以下头文件:
// myclass.h
#ifndef INCLUDED_MYCLASS
#define INCLUDED_MYCLASS
class MyClass
{
public:
void foo(); // declaration
};
inline void MyClass::foo()
{
// definition
}
#endif
为什么定义在文件类外的void foo()
,必须用inline
显式定义?
最佳答案
这是因为你在头文件中定义了MyClass::foo
。或者更抽象一点,该定义将出现在多个翻译单元中(每个包含 header 的 .cpp 文件)。
在程序中定义多个变量/函数违反了一个定义规则,该规则要求每个变量/函数在单个程序中只能有一个定义。
请注意, header 保护不会对此提供保护,因为它们仅在您在同一文件中多次包含相同 header 时提供保护。
虽然将函数定义标记为内联
意味着该定义在多个翻译单元中始终相同。1。
实际上,这意味着链接器将只使用 MyClass::foo
的第一个定义并在任何地方使用它,而忽略其余部分,
1:如果不是这种情况,则您的程序格式错误,不需要任何诊断。
关于c++ - 为什么必须内联定义在类外部(但在头文件中)的类成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659971/