C++ 什么是;“静态”;在声明全局模板函数的上下文中是什么意思?

C++ 什么是;“静态”;在声明全局模板函数的上下文中是什么意思?,c++,function,templates,C++,Function,Templates,我知道static在声明全局非模板函数(参见示例)的上下文中的含义,如果您在包含多个不同位置的头中编写帮助函数,并且希望避免“重复定义”错误,那么static非常有用 所以我的问题是:在声明全局模板函数的上下文中,static意味着什么?请注意,我特别询问的是不属于类的全局、非成员模板函数 换言之,以下两者之间的区别是什么: template <typename T> void foo(T t) { /* implementation of foo here */ } te

我知道static在声明全局非模板函数(参见示例)的上下文中的含义,如果您在包含多个不同位置的头中编写帮助函数,并且希望避免“重复定义”错误,那么static非常有用

所以我的问题是:在声明全局模板函数的上下文中,static意味着什么?请注意,我特别询问的是不属于类的全局、非成员模板函数

换言之,以下两者之间的区别是什么:

template <typename T>
void foo(T t)
{
    /* implementation of foo here */
}

template <typename T>
static void bar(T t)
{
    /* implementation of bar here */
}
模板
void foo(T)
{
/*foo在这里的实现*/
}
模板
静态空心钢筋(T)
{
/*在这里实现bar*/
}

请注意,除非需要模板函数的实例,否则实际上不会“编译”模板函数


然后,该实例具有与非模板静态函数相同的属性:即,来自其相应编译单元的实例对其他编译单元(包括链接器)不可见。

有趣-这是否意味着静态在这里没有效果?或者它改变了什么?这两个函数是否都是正确的/有效的C++函数?模板函数是自动内联的。在C++中,内联不仅提示编译器要内联,而且禁止将其包含到符号表中。C++中的内联含义与C99的代码>静态内联< /代码>的含义相同。所以,这里应该没有区别。