C++静态局部函数与全局函数
C++ static local function vs global function
在文件中拥有静态函数的效用是什么?
它们与在文件中具有全局函数有何不同?
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
函数有内部链接,也就是说,它们在翻译单元之外是不可见的。
相关文章:
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- 在命名空间中使用全局命名空间中的函数
- C++ 在编译时具有函数计算全局变量
- 在具有全局类型def的类中使用成员函数指针
- 修改程序的入口点时未调用全局变量的构造函数
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 全局函数参数
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 初始化与函数输入相关的全局数组
- 删除全局隐式函数 - 避免使用不明确的运算符
- 如何在全局变量的构造函数之前运行函数
- 如何定义全局函数指针并分配给特定地址
- 越界成员函数定义是否需要一个完全限定的类名,直到全局范围
- 在函数中用不同的名称引用全局向量
- 如何在一个结构体中为多个函数全局存储数据