对作用域、可见性、生存期、静态、动态、全局、局部这些概念的简单理解
作用域表示某个标识符在什么范围有效。
可见性指的是标识符是否可见,可引用。
生存期,是指程序中的简单变量和类的对象,它们同自然界中的万物一样,也有自己的产生和消亡的生存期,变量和对象的生存期包括静态生存期和动态生存期。具有静态生存期的变量和对象,它们的生存期与程序的运行期相同;除了具有静态生存期的变量和对象,其余的变量和对象则具有动态生存期。具有动态生存期的变量和对象,它们于被声明处产生,于自身的作用域结束处释放。
全局变量有文件作用域,也就是说,在整个文件作用域中,除了定义了同名局部变量的块以外的其他地方,都可以直接引用全局变量;局部变量就是具有块作用域的对象。
局部变量也可以有静态生存期,静态局部数据的生存期并不与局部作用域一致,它的生存期一直延续到程序运行结束。它产生于所在的函数第一次被调用、该局部静态变量被创建时。在函数返回时,静态局部变量处于不可访问的休眠状态。当再次调用该函数时,静态局部变量又苏醒过来,处于可访问状态。与动态局部变量的区别在于,静态局部变量苏醒时,并不重新进行初始化,而是保持着上次休眠状态开始之前的值。
补充:读到讲解常量的一节,发现类的静态常数据成员与类的一般静态数据成员在定义时有很大区别:一般静态数据成员通过构造函数的初始化列表进行初始化,而静态常数据成员的初始化必须通过类名来引用,而且必须注明const关键字:const 数据类型 类名::标识符=值;
还有一点与常量无关的内容需要补充,类的静态数据成员在类定义时,只做出声明,对其定义和初始化要在类定义以外,文件作用域以内的其他地方。无论类的静态数据成员的访问权限是公有还是私有,初始化时都可以通过类名直接访问,在主函数中则不能直接访问。