相关疑难解决方法(0)

822
推荐指数
10
解决办法
35万
查看次数

为什么内联函数默认具有外部链接?

标准说,给出声明

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++ inline linkage c++11 c++03

18
推荐指数
2
解决办法
2913
查看次数

标签 统计

c ×1

c++ ×1

c++-faq ×1

c++03 ×1

c++11 ×1

declaration ×1

definition ×1

inline ×1

linkage ×1

terminology ×1