当变量位于.cpp文件的全局范围内而不是函数中时,是否可以将变量标记为static
?
你也可以为函数使用static关键字吗?如果是,他们的用途是什么?
答案 0 :(得分:18)
是的,如果要声明文件范围变量,则需要static
关键字。在一个翻译单元中声明的static
个变量不能从另一个翻译单元中引用。
顺便说一下,在C ++ 03中不推荐使用static
关键字。
C ++标准(2003)中的$ 7.3.1.1 / 2部分读取,
使用static关键字是 在声明对象时不推荐使用 名称范围;该 unnamed-namespace提供了一个优越的 替代品。
C ++优先于static
关键字未命名命名空间。请参阅此主题:
答案 1 :(得分:15)
在这种情况下,关键字static表示函数或变量只能由同一cpp文件中的代码使用。相关符号不会被导出,也不会被其他模块使用。
当您知道其他模块中不需要全局函数或变量时,这是避免大软件中名称冲突的好习惯。
答案 2 :(得分:1)
以身作为例 -
// At global scope
int globalVar; // Equivalent to static int globalVar;
// They share the same scope
// Static variables are guaranteed to be initialized to zero even though
// you don't explicitly initialize them.
// At function/local scope
void foo()
{
static int staticVar ; // staticVar retains it's value during various function
// function calls to foo();
}
只有在程序终止/退出时它们才会停止存在。