关键字static
在c++中有多种含义,我觉得非常困惑,我永远无法思考它实际上应该如何工作。
根据我的理解,有static
存储持续时间,这意味着它在全局对象的情况下持续程序的生命周期,但当你谈论局部对象时,这意味着默认情况下它是零初始化的。
c++标准对关键字static
的类数据成员这样说:
3.7.1静态存储时长[basic.stc.static]
关键字static可以用来声明一个具有静态存储持续时间的局部变量。
在类定义中应用于类数据成员的关键字static给出了数据成员的静态存储持续时间。
局部变量是什么意思?这是一个函数局部变量吗?因为当你将一个函数声明为static
时,它只初始化了一次,即它第一次进入这个函数。
它也只讨论了关于类成员的存储持续时间,它不是特定于实例的呢,这也是static
的一个属性不是吗?或者是储存时间?
现在,关于static
和文件作用域的情况呢?默认情况下,是否所有全局变量都被认为具有静态存储持续时间?以下(来自第3.7.1节)似乎表明了这一点:
所有没有动态存储持续时间,没有线程存储持续时间,并且不是当地的的变量都有静态存储持续时间。这些实体的存储应在程序期间持续(3.6.2,3.6.3)。
static
与变量的链接有什么关系?
整个static
关键字完全令人困惑,有人能澄清它的不同英文用法,并告诉我当初始化一个static
类成员吗?