C和C++中static用法简单总结

来源:互联网 发布:mac代理设置 编辑:程序博客网 时间:2024/06/05 02:38

    static在C和C++中的用法本质上应该相同,但由于C++多了面向对象的概念,同时也就把该关键字的核心用法移植到了类中。下面就该关键字在C和C++里的用法先分别介绍,然后做一个简单比较。

C中:

1.修饰变量时

     无论是局部还是全局的静态变量,其存储位置和普通全局变量一样,都在数据段的静态数据区(全局数据区)。全局静态变量的作用域从声明开始到文件结束,只在该源文件中可见,其他源文件不可见,这里和普通全局变量不同,普通全局变量在其他文件中同样可见,只需加上关键字extern;局部静态变量的作用域和普通局部变量相同,仅限于函数或语句块,从声明开始到函数或语句块结束,但每一次操作该变量时,其值是上一次操作得到的值。两者的生命周期都是从程序启动到程序结束,没有初始化则默认初始化为0(数值类型)或空(字符类型)。 本质上,引入全局静态变量只是为了隐藏全局变量在其他外部文件的可见性;引入局部静态变量是为了达到保持局部变量内容持久化的目的,通过改变其存储位置到静态数据区而改变其生命周期进而达到持久化目的。注:(无论是全局还是局部静态变量,通过其他迂回方式在程序的任何地方—本文件或者其他外部文件—可见,比如通过该文件里的某个普通函数返回一个该静态变量的地址,进而可以达到修改该静态变量的目的)

2.修饰函数时

   修饰函数时目的和修饰全局变量一样,使得该函数在外部源文件中不可见,但同样可以通过迂回方式调用。

 

C++中

 在C++中,修饰普通变量和普通函数时用法和C一样。当修饰类成员变量时,该变量为所有该类对象共享,并可以通过类名加全局限定符::

直接访问,有些编译器要求必须对该变量进行初始化。修饰类成员函数时, 同样为所有类对象共享,访问方式同成员变量。但该静态成员函数不可以访问非静态成员变量,同样该静态成员函数不能使虚函数,但可以被继承或者覆盖。

原创粉丝点击