2

根据cppref,多个翻译单元中函数的身份特征inline如下:

...

2)它在每个翻译单元中具有相同的地址。

3)所有函数定义中的函数局部静态对象在所有翻译单元之间共享(它们都引用在一个翻译单元中定义的同一个对象)

...

简单地说,隐含了单例身份。

我想知道这是否同样适用于没有说明符的函数模板实例化inline

4

1 回答 1

2

我想知道这是否同样适用于没有 inline 说明符的函数模板实例化。

这同样适用于模板。见§3.2 一个定义规则:

  1. 类类型(第 9 条)、枚举类型(7.2)、带有外部链接的内联函数(7.1.2)、类模板(第 14 条)、非静态函数模板(14.5.6)可以有多个定义、类模板的静态数据成员 (14.5.1.3)、类模板的成员函数 (14.5.1.1) 或在程序中未指定某些模板参数的模板特化 (14.7, 14.5.5),前提是每个定义出现在不同的翻译单元中,并且定义满足以下要求。...如果 D 是一个模板并且在多个翻译单元中定义,那么前面的要求既适用于模板定义(14.6.3)中使用的模板封闭范围的名称,也适用于实例化点的依赖名称(14.6.2)。如果 D 的定义满足所有这些要求,那么程序的行为就好像有一个 D的定义。如果 D 的定义不满足这些要求,那么行为是未定义的。
于 2015-10-01T07:58:08.263 回答