C/C++ static 关键字
在 C/C++ 中,static 关键字使用恰当能够大大提高程序的模块化特性。
static 在 C++ 类之中和在类之外的作用不一样,在C语言中的作用和在 C++ 类之外的作用相同,下面一一说明:
在类外的作用
1.变量
局部变量
局部变量即是在函数或一个代码块内部声明的变量。
当局部变量被定义时,系统不会对其初始化;
作用域为函数或一个代码块;
局部变量储存在栈里,离开作用域就会无效。
在局部变量前面加上关键字 static,该变量变为静态局部变量。
变量在定义时,必须初始化,如果没有初始化,系统会自动对其初始化,如 int 型初始化为 0;
储存在全局变量区,一直存在直到程序运行结束。
静态局部变量相当于一个全局变量!!!
全局变量
全局变量是在函数体外部声明的变量。
在全局变量区分配存储空间,且编译器会自动对其初始化;
作用域为整个程序,即包括所用的源文件和头文件;
其他文件可以使用extern外部声明后直接使用,其他文件不能定义相同的变量。
同样,在全局变量前面加上关键字 static,该变量变为静态全局变量。
只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以;
作用域只在本文件;
其他文件可以定义与其同名的变量,两者互不影响。
2.函数
函数就是完成特定任务的独立程序代码单元。
static 在函数的使用方法是在函数的返回类型前面加上 static。其作用与全局变量类似。
静态函数只在声明它的文件中可见,其他文件不能引用该函数;
其他文件可以定义与其同名的变量,两者互不影响;
在类中的作用
一个类包含 数据成员 和 成员函数;
数据成员
在数据成员前加上 static 关键字,声明静态数据成员。
静态数据成员存储在全局变量区,静态数据成员在定义时分配存储空间;
在使用之前必须初始化,它的初始化在main()之前;
静态数据成员不属于任何对象。即使不定义类的任何对象它们也存在,在整个程序中只有一个,而且所有对象都可以对它进行操作;
与静态全局变量相比,静态数据成员变量不与程序中的其他全局变量冲突。
成员函数
在成员函数前加上 static 关键字,声明静态成员函数。其作用与静态数据成员类似。
静态成员函数不属于任何对象。调用时,它们无 this 指针,任何对象都可以调用;
静态成员函数不能为 virtual、const 或 volatile;
静态成员函数的地址可以存储在常规的函数指针中,但不能存储于成员函数指针中;
总结
这是我写的第一篇,有很多不足之处,但写下去就一定有进步。
static这个关键字很有用,可以尽量将只在本文件使用的全局变量和函数使用 static 关键字声明,同样,如果类中有一个数据成员对于所有对象来说,如球都是圆的等等,尽量使用 static 声明。
参考:
cppreference.com
C语言中的static 详细分析
C/C++ static 关键字的更多相关文章
- 浅谈Static关键字
1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- Java Static关键字详解
提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- c++中static关键字的用法总结
类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...
- static关键字
static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...
- C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
随机推荐
- 精益车间管理如何实现?让APS排程系统来帮忙
精益制造是企业全面的文化改变,它的主要目标是消灭任何形式的浪费.最明显的例子是在生产区域堆积的物料.在制品.等待客户来买的成品.它还可能包括员工不必的移动和不增值的许多流程,目标是在最小的库存,最短的 ...
- Eclipse properties配置文件中文乱码设置
1. eclipse中properties的默认编码为 ISO-8859-1, 输入汉字会被转换为unicode 2. 点击 Windows-->preferences 按下图找到更改编码 ...
- SpringBoot 发送简单邮件
使用SpringBoot 发送简单邮件 1. 在pom.xml中导入依赖 <!--邮件依赖--> <dependency> <groupId>org.springf ...
- vue-router路由传递参数 + get传值query获取
[步骤] (1)路由配置 或者 (2)传递参数 或者 (3)接收传递参数 或者 [二]步骤小结 [三]参数形式 (1)上面这种是/100形式传递过去 (2)另外还有?count=100的格式,这便是g ...
- Jenkins集成allure测试报告
前言 Allure框架是一个功能强大的自动化测试报告工具,不仅支持多种编程语言,而且能够完美的与各种集成工具结合,包括Jenkins,TeamCity,Bamboo,Maven等等,因此受到了很多测试 ...
- OpenResty: PHP增加数据库插件
首先修改下php.ini 文件 告诉php当前的扩展库路径 扩展库--就是扩展的其它功能的库 这个就是扩展库文件夹,里面有很多功能性文件 就是增加这一句 extension_dir = &qu ...
- [PHP] Laravel 5.5 图片上传功能
以Laravel 5.5 框架为主,进行文件上传功能的实现如下: 一.配置文件修改 打开 config/filesystems.php 文件在 ‘disks’ 数组中添加如下代码 //自定义 'upl ...
- PATB1014福尔摩斯的约会
参考代码: #include<cstdio> #include<cstring> #include<cstdlib> int main() { char week[ ...
- uiView获取指定子view
判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个类 ...
- 【BigData】Java基础_方法的定义与使用
1.概念 Java语言中的“方法”(Method)在其他语言当中也可能被称为“函数”(Function).对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代 ...