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的作用相关推荐

  1. 关键字static的作用是什么?

    1. 关键字static的作用是什么? 正确答案: 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维 ...

  2. C语言复习之关键字static的作用

    关键字static有三个明显的作用,简而言之就是: 1)如果修饰局部变量,改变局部变量的生存周期: 2)如果修饰全局变量和函数,改变其作用域(作用域由原来的整个工程变为在本文件内).

  3. 关键字static、const、volatile的作用

    关键字static的作用是什么?这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2. 在模 ...

  4. java static关键字的作用是什么_static关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  5. java中static关键字的作用_面试|static 关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  6. static关键字有什么作用

    目录 static关键字有什么作用 (1) static 成员变量 (2)static成员方法 (3) static 代码块 (4)static内部类 引申: 1.什么是实例变量?什么是局部变量?什么 ...

  7. 面试|static 关键字有什么作用

    今天主要学习下Java语言中的static关键字. static关键字的含义及使用场景 static是Java50个关键字之一.static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局 ...

  8. static在c语言中的作用_C语言关键字 static 的用法

    接上文:C语言的32个关键字 C语言 static 关键字的常见用法有三种: 用于局部变量的修饰符: 用于全局变量的修饰符: 用于函数的修饰符. 1.用于局部变量的修饰符 当 static 用于修饰局 ...

  9. C语言的一个关键字——static

    C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...

最新文章

  1. Leetcode 167. 两数之和 II - 输入有序数组 (每日一题 20210818)
  2. hdu-1207(规律推导)
  3. 下一步工作的一些思考和问题
  4. Java-异常03 自定义异常
  5. 【例9.7】友好城市
  6. Exchange常见问题大全
  7. Linux 查看日志文件命令(整合)
  8. 科研笔记2:科技论文作图规范
  9. 自制一寸照片的尺寸规范
  10. 图片阴影怎么设置_电影大片风格!教你用PS调出胶片质感的图片
  11. 软件项目验收需要的文档
  12. poi 获取excel单元格超链接和设置excel单元格超链接及导出excel
  13. go 极简后台管理-二次开发
  14. 发现一个有趣的漫画网站
  15. Android内存优化之图片查重
  16. android 9 预装可卸载的app,只安装一次
  17. CSS-float浮动
  18. 我眼中的算法导论 | 第一章——算法在计算中的作用、第二章——算法基础
  19. CSS matrix函数
  20. python第25天_python 第25天

热门文章

  1. C--排序算法:shell排序、快速排序
  2. 购买、配置阿里云Linux服务器配置ftp发布网站全教程
  3. 【Unity鼠标从屏幕空间(坐标)转换为世界空间(坐标)】
  4. Visual Studio Code搭建Java环境
  5. 申宝峰写的《人生悟》
  6. Java配合Tabula框架实现上传并解析PDF表格
  7. 培训总结集_(不更新)
  8. Android之PopupMenu
  9. 智能机器人STP电机定子装配STP可调节大行程移载机构STP5T单梁起重机三维图 SolidWorks机械式自动跟踪水位计全套 3D模型三维图纸川崎BX200L机器人钣金两边攻牙机3D
  10. 【Java位运算】Java中整数取反(位操作)