static关键字的用法:

1)将全局变量修饰为静态全局变量

存储在静态存储区,整个程序运行期间一直存在

静态全局变量在声明它的文件之外是不可见的,只要声明它的文件可见,而普通的全局变量则是所有文件可见

2)将局部变量修饰为静态局部变量

存储在静态存储区

作用域仍为局部作用域,但是当局部变量离开作用域之后,并没有销毁,而是仍然存储在内存中,只不过目前暂时不能对它进行访问,直到该函数再次被调用,并且值不变,只会被初始化一次

#include<stdio.h>
int fun()
{
static int count = ; //在第一次进入这个函数的时候,变量a被初始化为10!并接着自减1,以后每次进入该函数,a
return count--; //就不会被再次初始化了,仅进行自减1的操作;在static发明前,要达到同样的功能,则只能使用全局变量: }
int count = ;
int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= ; ++count)
printf("%d\t\t%d\n", count, fun());
return ;
}
/*
程序运行结果:
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
*/

3)将普通函数修饰为静态函数

静态函数只在声明它的文件中可见,所以不会同其他cpp中的同名函数引起冲突

4)将类的成员变量修饰为静态成员变量

静态成员变量是属于类的,而不是属于对象的,静态成员变量可以实现多个对象之间的数据共享,并且静态成员变量还不会破坏隐藏的原则,对多个对象来说,静态成员变量只存储一处,供所有对象共用

5)将类的成员函数修饰为静态成员函数

静态成员函数同样是属于类的,而不是属于对象,需要注意的是在静态成员函数的实现中不可以直接引用类中的非静态数据成员,但是可以直接引用静态成员,如果非要引用非静态的成员,则可以通过对象来引用

static关键字的作用:

1)作用域隐藏

当编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,static可以用作函数和变量的前缀,对函数来讲,static的作用仅限于隐藏

2)保持变量内容的持久

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一一次初始化

3)默认初始化为0(static变量)

4)静态成员函数和静态成员变量是属于类的,所有对象只有一份拷贝,所以不能将静态函数设置为虚函数(虚函数是来实现多态的,静态成员属于类而非对象,没有多态的概念)

【C++】static关键字有哪些用法?其主要作用是什么?的更多相关文章

  1. static关键字的新用法

    static关键字的新用法和总结: static这个关键字,也可以像“self”一样,代表“当前类”,用于访问一个类的“静态属性或静态方法”: 但, static,在应用中,更灵活,因此更常见! 因为 ...

  2. static关键字的用法

    静态变量和静态方法 static关键字的基本用法: 1.修饰变量:被static修饰的变量属于类变量,可以用类名.变量名来引用,而不用直接new一个对象来引用. 2.修饰方法:被static修饰的方法 ...

  3. C语言学习及应用笔记之二:C语言static关键字及其使用

    C语言有很多关键字,大多关键字使用起来是很明确的,但有一些关键字却要相对复杂一些.我们这里要说明的static关键字就是如此,它的功能很强大,相应的使用也就更复杂. 一般来说static关键字的常见用 ...

  4. Java中static关键字的定义

    1.static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法.以致于即使没有创建对象,也能使用属性和调用方法! static关键字还有一个比较关键的作用就是 用来形成 ...

  5. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  6. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. (转)Java中的static关键字解析

    转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...

  8. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  9. Java再学习——深究static关键字

    一.static关键字的用途 可以在没有创建对象的情况下来进行(方法/变量)调用.也就是,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. ...

随机推荐

  1. frp开机启动

    暂时只介绍linux版本的做法,作为备忘. 添加systemd配置文件: vim /usr/lib/systemd/system/frp.service 文件内容如下: [Unit] Descript ...

  2. jasypt-spring-boot

    运行 运行时配置解密秘钥-Djasypt.encryptor.password=在idea中运行 命令行启动和docker中运行参见https://www.cnblogs.com/zz0412/p/j ...

  3. 11.2Test

    11.2Test 题目 描述 做法 \(BSOJ6367\) 求一个字符串内出现最多长度为\(K\)的子串 定长\(Hash\) \(BSOJ6368\) 给出数列\(a_{i+2}=ka_{i+1} ...

  4. Jupyter的快捷键使用

    命令模式 (按键 Esc 开启) Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本单元,在其下插 ...

  5. random库

    伪随机数的原因: random库中函数主要用于产生各种分布的伪随机数序列.random库中的随机函数是按照一定算法模拟产生的,其概率是确定的.可见的,所以被称为伪随机数.而真正意义上的随机数是按照实验 ...

  6. [RN] React Native Fetch请求设置超时

    一.实现思路 根据Promise.race的特性,我们在Promise.race里面添加两个任务,一个是正常的网络请求任务A,另外一个便是网络延时任务B,网络延时可以利用setTimeout方法实现. ...

  7. Missing Data Reconstruction in Remote Sensing Image With a Unified Spatial–Temporal–Spectral Deep Convolutional Neural Network(缺失数据补全,时空谱网络)

    摘要 文章针对修复坏波段(AQUA B6),恢复条带损失,恢复云污染提出了一个深度学习网络结构,他说 To date, to the best of our knowledge, no studies ...

  8. 用Python自动办公,做职场高手(完结)

    教程目录: ┣━07.S2 Word自动化处理,又快又好做文档┃  ┣━36 本章介绍┣━08.[Word]S2-1 轻松用Python快速生成Word文档┃  ┣━45.[真实案例]S2-1-3 批 ...

  9. 让ie10/11支持非单页面的vue/es6

    为了满足某些客户的要求,最近让前端同学实现了ie 10(windows 7)/11(windows 10)支持多页面的vue/es6,基本参考如下: https://www.cnblogs.com/n ...

  10. centos 查看版本 及 升级

     查看系统版本: cat /etc/redhat-release(/etc/centos-release)// 或者 rpm -q centos-release [root@56 ~]# cat /e ...