10

静态变量的设计目的是什么?静态int和int有什么区别?

4

3 回答 3

34

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

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

静态数据成员和静态局部变量都可能成为隐藏的全局状态,应谨慎使用。

现在哪两个是密切相关的?这不是两个类成员——关于全局状态的警告泄露了它。您可以将静态数据成员视为静态局部变量,其中它们所属的函数是类的所有方法,而不是单个函数。

我发现了许多相关的问题,但令人惊讶的是,没有重复。

于 2010-01-03T16:47:10.227 回答
4

静态变量在数据段中初始化(在 x86 上;根据其他架构进行修改)而不是在堆栈中。它们会在程序的整个生命周期内持续存在,而不是在超出范围后消失。

于 2010-01-03T16:45:58.900 回答
3

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

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

于 2010-01-03T16:44:34.707 回答