43

在文件中包含静态函数有什么用处?

它们与文件中的全局函数有何不同?

static int Square(int i)
{
   return i * i;
} 

对比

int Square(int i)
{
   return i * i;
}
4

4 回答 4

54

在文件中包含静态函数有什么用处?

您可以使用这些函数为同一文件中的其他函数提供共享的实现逻辑。特定于文件的各种帮助函数是声明为文件静态的良好候选者。

它们与在文件中具有全局函数有何不同?

它们对链接器不可见,允许其他编译单元定义具有相同签名的函数。使用命名空间在很大程度上缓解了这个问题,但文件static函数早于命名空间,因为它们是从 C 编程语言继承的特性。

于 2013-02-07T02:46:56.140 回答
24

static函数只是意味着链接器不能导出函数(即使其对其他翻译单元可见)。它使功能对当前翻译单元“私有”。这与将函数包装在匿名命名空间中相同。

namespace {

    int Square(int i)
    {
       return i * i;
    } 

}

通常,使用匿名命名空间是实现此目的的首选 C++ 方式,而不是使用static关键字。

于 2013-02-07T02:46:47.357 回答
4

静态函数仅在定义它们的文件上可见。您不能在该特定文件之外引用它们。

在这里阅读更多

于 2013-02-07T02:47:06.807 回答
4

一句话,联动。static函数具有内部链接,也就是说,它们在翻译单元之外是不可见的。

于 2013-02-07T02:47:42.790 回答