我知道 static 在声明全局非模板函数的上下文中意味着什么(参见例如What is a "static" function?),如果在包含的头文件中编写辅助函数,这将非常有用来自几个不同的位置,并希望避免“重复定义”错误。
所以我的问题是: static 在声明全局模板函数的上下文中意味着什么?请注意,我特别询问不属于某个类的全局,非成员模板函数。
换句话说,以下两者之间有什么区别:
template <typename T>
void foo(T t)
{
/* implementation of foo here */
}
template <typename T>
static void bar(T t)
{
/* implementation of bar here */
}
答案 0 :(得分:1)
请注意,模板功能实际上并没有被编译成&#39;除非需要该模板函数的实例。
然后,实例具有与非模板静态函数相同的属性: ie 从其对应的编译单元发出的实例对其他编译单元是不可见的,包括链接器。