该标准说,给定一个声明
inline void foo();
这foo
是一个具有外部链接的内联函数(因为默认情况下所有函数声明都具有外部链接)。这让我觉得很奇怪。因为一个定义规则第 3.2 节(在 C++03 和 C++11 中)说:
3 ... 内联函数应在使用它的每个翻译单元中定义。
5 可以有多个 a[n] 的定义......具有外部链接的内联函数(7.1.2)......给定这样一个名为 D 的实体在多个翻译单元中定义...... D 的每个定义都应由相同的标记序列组成
这意味着内联函数也可能具有内部链接,因为通过外部链接(即跨翻译单元)以任何方式使用该函数将调用未定义的行为(根据第 3 段),并且所有翻译单元中的内联函数必须相同。
此规则是否存在向后兼容性或特定工具链原因?