在全局作用域中使用静态变量和函数

22 浏览
0 Comments

在全局作用域中使用静态变量和函数

当一个变量在一个.cpp文件的全局作用域中,不在函数中时,将其标记为static,有用吗?

函数也可以使用static关键字吗?如果是,那么它们的用途是什么?

admin 更改状态以发布 2023年5月23日
0
0 Comments

在这种情况下,关键字"static"意味着该函数或变量只能被相同cpp文件中的代码所使用。相关符号不会被导出,也无法被其他模块使用。

在大型软件中,如果你知道你的全局函数或变量不需要在其他模块中使用,这是一个避免名称冲突的好的做法。

0
0 Comments

是的,如果你想声明文件作用域变量,那么 static 关键字是必要的。static 在一个翻译单元中声明的变量不能从另一个翻译单元中引用。


顺便说一句,在 C++03 中,static 关键字的使用已被弃用。

C++ 标准(2003)的第 $7.3.1.1/2 节中写道:

在命名空间作用域中声明对象时,使用 static 关键字是不推荐的;未命名命名空间提供了一种更好的替代方案。

C++ 更喜欢未命名命名空间而不是 static 关键字。详见此话题:

未命名命名空间比 static 优越吗?

0