标准说,给出声明
inline void foo();
Run Code Online (Sandbox Code Playgroud)
这foo是一个带有外部链接的内联函数(因为默认情况下所有函数声明都有外部链接).这让我很奇怪.因为一个定义规则第3.2节(在C++ 03和C++ 11中)都说:
3 ...应在每个使用它的翻译单元中定义内联函数.
5 [n] ...内联函数可以有多个定义与外部联系(7.1.2)......给定这样一个名为D的实体在多个翻译单元中定义... D的每个定义应由相同的令牌序列组成
这意味着内联函数也可能具有内部链接,因为通过外部链接(即跨翻译单元)以任何方式使用函数将调用未定义的行为(通过第3段),并且内容为所有翻译单元中的内联功能需要相同.
此规则是否存在向后兼容性或特定工具链的原因?
c ×1
c++ ×1
c++-faq ×1
c++03 ×1
c++11 ×1
declaration ×1
definition ×1
inline ×1
linkage ×1
terminology ×1