C,与C++的static的几大用法以及区别。
2008-11-21 12:34
453 查看
static在C,C++中都是关键字。但是两者的用法却有些不同;
总结起来可以分为:
一,面向过程static的用法:
1,静态全局变量。/静态函数;
1)C语言中的全局变量的作用域是整个程序;只要你在其他的文件中(如果要使用一个全局变量),用extern声明下就可以使用在其他文件中已经定义的全局变量!
这样导致的一个后果就是使得程序比较难以维护,而且命名的错误也显得更为隐蔽!
为了限制其在其他文件中的作用域。
往往就会使用静态全局变量。就是在全局变量前面加上static关键字。此时变量的数据分配的区域仍然是在全局区域内,但是他的作用域却只有在当前文件中,无论在其他文件是否声明了外部的变量!
2)静态函数;
跟静态全局变量类似,原先的全局函数具有的程序域可访问的性质也没有了!只能文件域内访问!
2,静态局部变量;
对于C或者是C++当中函数内部的变量,默认情况下都是分配在堆栈上面的临时局部变量。在函数调用结束以后变量就会被销毁掉。
为了能够在其他函数中共享,可以使用静态局部变量。
在变量前加上static。此时变量的作用域仍然是函数内部但是他的生命周期是全局的!
二,面向对象的static成员;
C++对static关键字做了重用,在类中赋予了新的含义。声明为static的成员其隶属于类。因为他是随着类的初始化加载的,而且只会加载一次!
静态成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针;
因此在定义的时候应该要注意。在实现静态static函数的时候在CPP中就不用声明了跟virtual的类似!
总结起来可以分为:
一,面向过程static的用法:
1,静态全局变量。/静态函数;
1)C语言中的全局变量的作用域是整个程序;只要你在其他的文件中(如果要使用一个全局变量),用extern声明下就可以使用在其他文件中已经定义的全局变量!
这样导致的一个后果就是使得程序比较难以维护,而且命名的错误也显得更为隐蔽!
为了限制其在其他文件中的作用域。
往往就会使用静态全局变量。就是在全局变量前面加上static关键字。此时变量的数据分配的区域仍然是在全局区域内,但是他的作用域却只有在当前文件中,无论在其他文件是否声明了外部的变量!
2)静态函数;
跟静态全局变量类似,原先的全局函数具有的程序域可访问的性质也没有了!只能文件域内访问!
2,静态局部变量;
对于C或者是C++当中函数内部的变量,默认情况下都是分配在堆栈上面的临时局部变量。在函数调用结束以后变量就会被销毁掉。
为了能够在其他函数中共享,可以使用静态局部变量。
在变量前加上static。此时变量的作用域仍然是函数内部但是他的生命周期是全局的!
二,面向对象的static成员;
C++对static关键字做了重用,在类中赋予了新的含义。声明为static的成员其隶属于类。因为他是随着类的初始化加载的,而且只会加载一次!
静态成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针;
因此在定义的时候应该要注意。在实现静态static函数的时候在CPP中就不用声明了跟virtual的类似!
相关文章推荐
- 解析static在C和C++中的用法以及区别
- static的含义以及其在C/C++中的区别
- [C/C++] static在C和C++中的用法和区别
- static在C和C++中的用法和区别
- static在C和C++中的用法和区别
- C++之普通成员函数、虚函数以及纯虚函数的区别与用法要点
- C++ 匿名namespace的作用以及它与static的区别
- C++ 匿名namespace的作用以及它与static的区别
- Static在C和C++中的用法和区别
- 转:C++ 匿名namespace的作用以及它与static的区别
- static在C和C++中的用法和区别
- static在C和C++中的用法和区别
- C++ 匿名namespace的作用以及它与static的区别
- static的含义以及其在C/C++中的区别
- static的含义以及其在C/C++中的区别
- C++中,string::nops 的用法以及和string.find()的区别
- C++中string类的处理字符串构造函数用法, 以及getline cin.getline()输入的区别
- 【C/C++】结构体和联合体的区别,以及枚举类型的用法
- [面试] static的含义以及其在C/C++中的区别
- C++中四种对象生存期和作用域以及static的用法总结分析