5

静态变量通常是:(在大多数编程语言中)在程序的代码段上共享、持久化和分配

但这与静态这个词有什么关系?什么是静态的?我认为static手段不会改变?

例如,在 vb.net 中,static 被写入共享,这意味着无需对象实例化即可访问的成员函数。函数内的静态通常意味着变量的生命周期是整个程序的生命周期。似乎静态变量存储在计算机的代码部分。根据示例,我的理解是否正确?

4

7 回答 7

20

好吧,我认为关键字是合适的。这意味着您声明为静态的变量将在整个程序执行期间保持存储在同一位置。

我认为静态手段不会改变

这对应于const关键字。Const 意味着它不会改变, static 意味着它不会“移动”,因为它保持存储在同一位置。

于 2013-02-15T10:42:00.760 回答
8

一般来说,编程语言中的静态事物不会改变的是它是否活着。静态变量总是存在的;它们有一个实例,该实例在程序开始时或第一次可见时生成,并持续到程序结束。非静态变量来来去去,随着块的进入和离开,或者随着类实例的创建和销毁。

在 C++ 中,出于 C 兼容性的原因,静态应用于命名空间范围内的变量时,具有完全不相关的含义:这意味着该变量具有内部链接,而不是外部链接,并且在其他翻译单元中不可见。为什么在早期的 C 中采用静态这个词,我不知道;我只能猜测他们需要一些东西,并且不想引入新的关键字。(最初,在 C 的最早版本中,文件范围内的变量遵循 Fortran 命名公共块的规则:所有同名变量都引用同一个存储。)当然,回顾一下(20/20 事后诸葛亮) ,文件范围内的变量的默认值应该是内部链接,带有一个特殊的关键字 (public?) 说变量有外部联系。但这在 1970 年代初期就不那么明显了。

于 2013-02-15T11:01:44.653 回答
3

静态是指变量存储。在函数调用中,您声明的每个变量都被压入堆栈。与其他变量不同,静态变量不会被压入堆栈,它就像一个全局变量,在程序的整个执行过程中仍然存在,不同之处在于仅在声明的块内可见。

于 2013-02-15T10:39:53.020 回答
1

我认为你只需要学习计算机科学中“静态”的含义,而不是将其与英语口语联系起来。特别是当它适用于变量和函数时,在 C 中的结果略有不同。

于 2013-02-15T10:40:48.893 回答
1

该词的定义来自http://dictionary.reference.com/browse/static?s=t

  1. 属于或以固定或静止状态为特征的。
  2. 显示很少或没有变化:一个静态的概念;一种静态的关系。

静态变量是即使在超出范围后仍保持其状态的变量,而不是每次返回范围时都会重新初始化的非静态变量 - 因此可以考虑具有“静止条件” ”或显示“没有变化”

于 2013-02-15T11:11:40.753 回答
1

如果可以避免,请不要为 C++ 使用静态。在任何现代语言中,静态只是意味着只有一个实例并且它永远不会被破坏。这与英语的含义相差不远,并且很好地导致了对 const/final/readonly 及其含义的讨论。

于 2014-04-09T05:29:04.410 回答
1

静态变量的意思是,变量只有一个副本,即使你创建了类的多个实例。也就是说,指定类的所有对象都使用相同的内存位置。或者如果你想要一个例子,比如说,我们有两个线程。在第一个线程上,您创建一个进度条,在第二个线程上您需要更新它。在这种情况下,您可以在进度条的类中定义一个静态变量来存储进度并在每个线程中创建一个类的实例。一个线程用于初始化并在另一个中更改静态变量的值。由于两者都使用相同的副本,因此进度将在第一个线程中可用。所以静态意味着在创建新实例时不会改变其位置的东西..或者我们可以说保留其状态的东西;)等等等等

于 2014-04-09T05:46:40.903 回答