根据cppref,多个翻译单元中inline
函数的同一性特征如下:
…
2)每个翻译单元都有相同的地址
3)所有函数定义中的函数局部静态对象都是在所有翻译单元之间共享(它们都引用相同的对象)在一个翻译单元中定义)
…
简单地说,隐含了一个单例标识。
我想知道是否同样适用于没有 inline
说明符的函数模板实例化。
我想知道是否同样适用于没有内联说明符的函数模板实例化。
同样适用于模板。见§3.2一个定义规则:
类类型(第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的定义不满足这些要求,那么行为是未定义的。