什么是静态变量?

时间:2010-01-03 16:43:20

标签: c++ static static-members

什么是静态变量? static int和int之间有什么区别?

3 个答案:

答案 0 :(得分:33)

static关键字有四个不同的用途,其中只有两个密切相关:

    全局和命名空间范围内的
  • static(应用于变量和函数)意味着内部链接
    • 这被unnamed namespaces取代,与其他
    • 无关
    • 特别是,其他人倾向于暗示某种独特性,但内部联系意味着相反:你可以拥有许多具有相同名称的对象,只要每个对象都有内部联系而你只有每个翻译单位一个
  • 静态数据成员在类的所有实例之间“共享”
    • 它更像是独立于任何类实例
    • 这有时与静态方法分组
  • 静态方法不会在当前实例上“操作”
    • 没有指针;可以在没有实例的情况下调用
  • 静态局部变量(在函数中)在每个函数调用的范围内持续存在

静态数据成员和静态局部变量都可以成为隐藏的全局状态,应该小心使用。

现在哪两个密切相关?这不是两个阶级成员 - 关于全球国家的警告会让它消失。您可以将静态数据成员视为静态局部变量,其中所属的函数是该类的所有方法,而不是单个函数。

我发现很多related questions,但令人惊讶的是,没有重复。

答案 1 :(得分:4)

静态变量在数据段中初始化(在x86上;根据其他体系结构进行修改)而不是在堆栈上。它们持续到程序的生命中,而不是一旦它们超出范围就会蒸发。

答案 2 :(得分:3)

可以在没有实例的情况下引用静态成员。

请参阅此处的“静态成员”部分:http://www.cplusplus.com/doc/tutorial/classes2/