[英]Template instantiation in different translation units compiled with different optimization levels
[英]Identity of function template instantiation in multiple translation units
根据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 的定义不满足这些要求,则该行为是未定义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.