C++ static的作用,非类中,和类中的static
来源:互联网 发布:dos编译java文件 编辑:程序博客网 时间:2024/06/11 17:49
不考虑类 static 的三个作用
作用1: 隐藏
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。
例如,同一模块中,一个a.c,一个main.c
a.c中
char a = 'A';void msg(){}
在main.c中可以直接访问到,如果加上static, 那么将只能在本文件中访问到,而无法被该模块下的其他文件访问到
作用2: static变量默认初始化为0
* 包括未初始化的全局静态变量 和 静态局部变量。(存储在BSS段,默认都是0x00)
* 未初始化的全局变量 也是 默认初始化为 0
string sa[10]; // string 默认构造函数,为空串“”static int ia[10]; // 全局的,不论有无static 都初始化为0int main(){ string sa2[10]; // 局部,不过有默认的构造函数为空串“” int ia2[10]; // 局部,初始值是不确定的 return 0;}
作用3:保持局部变量的持久
static变量值初始化一次,声明周期为整个源程序
在函数中的static变量,不像栈中存储的局部变量会消失
int fun(int n){ static int sums = n; // 每次调用都想通过赋值初始化,其实只初始化了第一次而已 sums += n; return sums;}int main(){ for(int i=0;i < 5;i++) { printf("%d\n", fun(i)); //0 1 3 6 10 } return 0;}
类中 static的作用
静态数据成员
不属于对象,属于类,所有实例对象公用一份,
仍然有private,public,protect属性
没有对象实例,static成员依然存在类中
static 数据成员必须在类外初始化
当然,如果在加上关键const, 则是可以在类中进行初始化的
class A{public: static int a = 100; // 报错};
class A{public: static int a;};int A::a = 100;****
- static成员存放在程序的全局(静态)存储中,不算在类大小中
静态成员函数
与静态数据成员一样,仍然属于类
this指针是非静态成员函数有的, static成员函数将没有this指针
静态成员函数 无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,只能调用其他的静态成员函数,访问静态的数据成员
static成员函数不能声明为const
const 修饰成员函数表示 该成员函数不会修改某个该函数所属的对象(const修饰的成员方法必须有this指针),static不属于任何对象,没有this指针。
静态成员之间的访问
包括静态成员函数访问 静态成员函数,静态数据成员。静态成员不能访问非静态的成员函数,不能访问非静态的成员数据,
非静态的成员函数可以任意的访问静态成员函数 和 静态数据成员
由于没有this指针的额外开销,静态成员函数与类的非静态成员函数相比速度上会有少许的增长。
- C++ static的作用,非类中,和类中的static
- C语言中的static关键字的作用
- C/C++中的static关键字的作用
- C的static作用
- static的作用(c)
- C和C++中static的作用
- static在C中的作用?
- c语音中的static作用
- static在C中的作用
- C语言中的static作用
- [c/c++]static的作用
- Tag C/C++ 中的static的三个作用
- 关于extern和static在C/C++中的作用
- C-051.static和extern在局部变量中的作用
- 关键字static在C和C++中的作用
- Java 中的 static 的作用
- c++中的static的作用?
- c中static的作用
- 透明颜色背景
- RN颜色
- 正则表达式中 test(),exec(),match() 方法的区别
- 在 CSS 里加载字体
- 为什么java.net.URLEncoder.encode方法要调用两次而不是一次呢?
- C++ static的作用,非类中,和类中的static
- 去他娘的傻逼迷瘴
- pom.xml解析
- JDK之LinkedHashMap源码解析
- 理解java的三大特性之多态
- linux 系统下使用socket进行本地进程间通信
- java集合梳理
- poj 3007 Organize Your Train part II(map)
- 归并排序