关于c ++:在全局范围内使用静态变量和函数

Use of static variables and functions in global scope

当变量位于.cpp文件的全局范围内,而不是在函数中时,是否可以将其标记为static

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


是的,如果要声明文件范围变量,则需要static关键字。一个翻译单元中声明的static变量不能从另一个翻译单元引用。

顺便说一下,在C++ 03中使用EDCOX1的0个关键字。

从C++标准(2003)读取$7.3.1.1/2的部分,

The use of the static keyword is
deprecated when declaring objects in a
namespace scope; the
unnamed-namespace provides a superior
alternative.

C++在EDCOX1的0个关键字上更喜欢未命名的命名空间。请参阅本主题:

未命名命名空间相对于静态命名空间的优势?


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

这是一个很好的实践,当您知道在其他模块中不需要全局函数或变量时,可以避免在大型软件中出现名称冲突。


举个例子-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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();                  
}

它们都只在程序终止/退出时才停止存在。