关键字static的作用
1、 关键字static的作用是什么?
正确答案:
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数 据和代码范围的好处和重要性。
2.static关键字的作用
- 修饰局部变量
static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)
- 修饰全局变量
全局变量本来就存储在静态区,因此static并不能改变其存储位置。但是,static限制了其链接属性。被static修饰的全局变量只能被该包含该定义的文件访问(即改变了作用域)。
- 修饰函数
static修饰函数使得函数只能在包含该函数定义的文件中被调用。对于静态函数,声明和定义需要放在同一个文件夹中。
- 修饰成员变量
用static修饰类的数据成员使其成为类的全局变量,会被类的所有对象共享,包括派生类的对象,所有的对象都只维持同一个实例。 因此,static成员必须在类外进行初始化(初始化格式:int base::var=10;),而不能在构造函数内进行初始化,不过也可以用const修饰static数据成员在类内初始化。
- 修饰成员函数
用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针,因而只能访问类的static成员变量。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。例如可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好,比如定义一个数学函数类Math,调用Math::sin(3.14);还可以实现某些特殊的设计模式:如Singleton;
最重要的特性:隐藏
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏。
不可以同时用const和static修饰成员函数。
C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。
例1:修饰成员变量:同一个类的所有实例共享一个静态成员变量
#include<iostream>using namespace std;
class S1
{
public:static int a;void say(){cout << a << endl;}
protected:
private:
};
int S1::a = 10;
void main(){S1 s1;S1 s2;s1.a = 5;s1.say();//5s2.say();//5s2.a = 6;s1.say();//6system("pause");}
关键字static的作用相关推荐
- 关键字static的作用是什么?
1. 关键字static的作用是什么? 正确答案: 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维 ...
- C语言复习之关键字static的作用
关键字static有三个明显的作用,简而言之就是: 1)如果修饰局部变量,改变局部变量的生存周期: 2)如果修饰全局变量和函数,改变其作用域(作用域由原来的整个工程变为在本文件内).
- 关键字static、const、volatile的作用
关键字static的作用是什么?这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2. 在模 ...
- java static关键字的作用是什么_static关键字有什么作用
今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...
- java中static关键字的作用_面试|static 关键字有什么作用
今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...
- static关键字有什么作用
目录 static关键字有什么作用 (1) static 成员变量 (2)static成员方法 (3) static 代码块 (4)static内部类 引申: 1.什么是实例变量?什么是局部变量?什么 ...
- 面试|static 关键字有什么作用
今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...
- static在c语言中的作用_C语言关键字 static 的用法
接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...
- C语言的一个关键字——static
C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...
最新文章
- Leetcode 167. 两数之和 II - 输入有序数组 (每日一题 20210818)
- hdu-1207(规律推导)
- 下一步工作的一些思考和问题
- Java-异常03 自定义异常
- 【例9.7】友好城市
- Exchange常见问题大全
- Linux 查看日志文件命令(整合)
- 科研笔记2:科技论文作图规范
- 自制一寸照片的尺寸规范
- 图片阴影怎么设置_电影大片风格!教你用PS调出胶片质感的图片
- 软件项目验收需要的文档
- poi 获取excel单元格超链接和设置excel单元格超链接及导出excel
- go 极简后台管理-二次开发
- 发现一个有趣的漫画网站
- Android内存优化之图片查重
- android 9 预装可卸载的app,只安装一次
- CSS-float浮动
- 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础
- CSS matrix函数
- python第25天_python 第25天
热门文章
- C--排序算法:shell排序、快速排序
- 购买、配置阿里云Linux服务器配置ftp发布网站全教程
- 【Unity鼠标从屏幕空间(坐标)转换为世界空间(坐标)】
- Visual Studio Code搭建Java环境
- 申宝峰写的《人生悟》
- Java配合Tabula框架实现上传并解析PDF表格
- 培训总结集_(不更新)
- Android之PopupMenu
- 智能机器人STP电机定子装配STP可调节大行程移载机构STP5T单梁起重机三维图 SolidWorks机械式自动跟踪水位计全套 3D模型三维图纸川崎BX200L机器人钣金两边攻牙机3D
- 【Java位运算】Java中整数取反(位操作)