C语言中的static变量 和 C++中static变量
2012-04-13 19:36
281 查看
C语言中static的变量:
1).static局部变量
a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
2).static全局变量
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件(.h或.cpp)内有效, 在同一源程序的其它源文件中不能使用它。
关于C语言static变量的理解:
A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C、静态变量和全局变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出;
D、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
C++语言中static的变量:
1).static局部变量
A、static成员变量设置初值的时候,不受任何权限的束缚。但是这里需要解释的是,并不是在任何时候都不受束缚,仅仅在赋初始值的时候不受权限束缚,如果是在中途改变static成员变量的值的话,必须是public类型的才能改变,否则编译错误。
这个static变量在初始化后,生存期为整个程序运行期间,该静态成员被类的所有对象所共享。即在内存中对所有的对象,只有一份。
例如:对配置文件的类,我们可以在里面定义一个它自身的静态成员对象指针。
这样,当我们要使用配置时,只用获取这个指针,就可以进行具体操作。
2).static全局变量
A、C++中的全局静态变量和C语言中的全局静态变量作用相同。
C++中关于静态成员的几点约束::
1、静态数据成员仅仅在初始化时,不受访问权限的约束;
2、静态数据成员最好不要在.h文件中进行声明,而是放在.o文件中声明;
3、静态数据成员被类的所有对象所共享,包括类的派生类的所有对象;——即派生类和基类共享一个静态成员。
4、静态数据成员的类型可是所属类自己,即在一个类中可以声明该类自己的类型的静态成员对象,但是,不可以定义普通的成员对象,(指针可以)
5、在const成员函数中,可以修改static成员变量的值。普通成员变量的值,是不能修改的。
6、static成员函数只能访问static成员,不能访问非static成员,并且static成员函数不能定义为const函数。即不能有CV约束(const 和 voliate约束)
7、静态数据成员可以定义有const约束
1).static局部变量
a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。
b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。
2).static全局变量
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件(.h或.cpp)内有效, 在同一源程序的其它源文件中不能使用它。
关于C语言static变量的理解:
A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C、静态变量和全局变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出;
D、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
C++语言中static的变量:
1).static局部变量
A、static成员变量设置初值的时候,不受任何权限的束缚。但是这里需要解释的是,并不是在任何时候都不受束缚,仅仅在赋初始值的时候不受权限束缚,如果是在中途改变static成员变量的值的话,必须是public类型的才能改变,否则编译错误。
这个static变量在初始化后,生存期为整个程序运行期间,该静态成员被类的所有对象所共享。即在内存中对所有的对象,只有一份。
例如:对配置文件的类,我们可以在里面定义一个它自身的静态成员对象指针。
这样,当我们要使用配置时,只用获取这个指针,就可以进行具体操作。
2).static全局变量
A、C++中的全局静态变量和C语言中的全局静态变量作用相同。
C++中关于静态成员的几点约束::
1、静态数据成员仅仅在初始化时,不受访问权限的约束;
2、静态数据成员最好不要在.h文件中进行声明,而是放在.o文件中声明;
3、静态数据成员被类的所有对象所共享,包括类的派生类的所有对象;——即派生类和基类共享一个静态成员。
4、静态数据成员的类型可是所属类自己,即在一个类中可以声明该类自己的类型的静态成员对象,但是,不可以定义普通的成员对象,(指针可以)
5、在const成员函数中,可以修改static成员变量的值。普通成员变量的值,是不能修改的。
6、static成员函数只能访问static成员,不能访问非static成员,并且static成员函数不能定义为const函数。即不能有CV约束(const 和 voliate约束)
7、静态数据成员可以定义有const约束
相关文章推荐
- C语言中的static变量和C++静态数据成员(static member)
- C语言中的static变量 和 C++中static变量—生成期、作用域、访问约束、对谁可见等
- C语言中的static变量和C++静态数据成员 的访问情况
- C语言中的static变量和C++静态数据成员
- C语言中的static变量和C++静态数据成员(static member)
- 转:C语言中的static变量和C++静态数据成员(static member)
- C语言中的static变量和C++静态数据成员
- C语言中的static变量和C++静态数据成员(static member)详解!
- c语言中static 变量
- C++中static、const、static const修饰变量作用详解
- 在c++头文件中使用static修饰的全局变量
- C/C++---static函数,static成员函数,static变量,static成员变量 再来理一理
- c语言中static 变量和函数
- C++中static、const、static const修饰变量作用详解
- C/C++中的 static 变量和 static 函数
- static的用法详解--C语言和C++分别介绍
- c++ 类中static变量初始化问题
- C++对C语言的变量检测增强
- C语言中的 static变量、static函数
- 待补遗(2)[C++]extern,const,static的不同文件间变量访问控制