在文件中使用静态函数有什么用?
它们与文件中的全局函数有何不同?
static int Square(int i)
{
return i * i;
}
vs
int Square(int i)
{
return i * i;
}
答案 0 :(得分:36)
在文件中使用静态函数有什么用?
您可以使用这些函数为同一文件中的其他函数提供共享实现逻辑。特定于文件的各种辅助函数是被声明为文件静态的良好候选者。
它们与文件中的全局函数有何不同?
它们对链接器是不可见的,允许其他编译单元定义具有相同签名的函数。使用命名空间可以在很大程度上缓解这个问题,但文件 - static
函数优先于命名空间,因为它们是从C编程语言继承的特性。
答案 1 :(得分:12)
static
函数只是意味着链接器无法导出函数(即使其对其他translation units可见)。它使功能“私有”到当前翻译单元。它与在匿名命名空间中包装函数相同。
namespace {
int Square(int i)
{
return i * i;
}
}
通常,使用匿名命名空间是实现此目的的首选C ++方法,而不是使用static
关键字。
答案 2 :(得分:3)
静态函数仅在定义它们的文件中可见。 您不能在该特定文件之外引用它们。
答案 3 :(得分:3)
总之,联系。 static
个函数具有内部链接,也就是说,它们在翻译单元之外是不可见的。