C ++中的静态全局标识符和非静态全局标识符有什么区别?

时间:2012-10-31 16:03:19

标签: c++ static global-variables identifier

C ++中static全局和非static全局标识符之间有什么区别?

4 个答案:

答案 0 :(得分:31)

静态将变量的范围限制为相同的 translation unit 静态全局变量具有内部链接 非静态全局变量具有外部链接

好读:
What is external linkage and internal linkage?

答案 1 :(得分:8)

全局static变量仅在变量所在的转换单元(即源文件)中可用。可以从其他源文件引用非静态全局变量。< / p>

答案 2 :(得分:3)

如果你不知道区别是什么,正确答案可能会让你更加困惑。简而言之,类的static不适用于文件范围的静态。类的静态与常规变量基本相同,但必须通过在类前添加前缀来引用它们。文件范围的静态是仅对文件本地的常规变量。要了解这意味着什么,请尝试将两个具有相同名称的变量添加到单个项目中。您将收到链接器错误,因为有多个相同的符号。通过使符号静态,您将避免该问题,并且无法从文件外部访问变量的名称。

答案 3 :(得分:2)

全局非静态变量可从其他文件访问,而静态全局变量不是