And*_*kas 5 c++ inline function member header-files
我已经阅读了有关内联两种含义的现有答案,但我仍然感到困惑。
假设我们有以下头文件:
// myclass.h
#ifndef INCLUDED_MYCLASS
#define INCLUDED_MYCLASS
class MyClass
{
public:
void foo(); // declaration
};
inline void MyClass::foo()
{
// definition
}
#endif
Run Code Online (Sandbox Code Playgroud)
为什么void foo()在文件中的类之外定义的 which 必须使用 显式定义inline?
这是因为你MyClass::foo在头文件中定义了。或者更抽象一点,该定义将出现在多个翻译单元中(每个包含标头的 .cpp 文件)。
在程序中对变量/函数有多个定义违反了“单一定义”规则,该规则要求每个变量/函数在单个程序中只能有一个定义。
请注意,标头防护不能防止这种情况,因为它们仅在同一文件中多次包含相同标头时提供保护。
将函数定义标记为inline好像意味着该定义在多个翻译单元中始终相同。1 .
实际上,这意味着链接器将只使用第一个定义MyClass::foo并在任何地方使用它,而忽略其余的,
1:如果不是这种情况,则您的程序格式不正确,无需任何诊断。