C++静态局部函数与全局函数

C++ static local function vs global function

本文关键字:函数 全局 静态局 C++      更新时间:2023-10-16

在文件中拥有静态函数的效用是什么?

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

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

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

在文件中具有静态函数的效用是什么?

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

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

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

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

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

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

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

点击此处阅读更多

总之,链接。static函数有内部链接,也就是说,它们在翻译单元之外是不可见的。