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. 笨方法学python3

    阅读<笨方法学python3>,归纳的知识点 相关代码详见github地址:https://github.com/BMDACMER/Learn-Python 习题1:安装环境+练习  pr ...

  2. OpenCV 学习笔记(0)两幅图像标定配准

    参考教程 依赖opencv扩展库,使用sifi匹配 保存配准信息 "./config/calibratedPara.yaml" #include <iostream> ...

  3. Subband Decomposition

    子带分解. 例如语音信号是宽带信号,根据奈奎斯特采样定理,采样率为16kHz的语音信号的有效带宽是8KHz,不论是对于降噪,aec,vad,波束形成亦或是logfbank特征提取,我们都期望更精细的处 ...

  4. OpenCV实现"你的名字"滤镜

    这是一个比较有意思的demo,用到了播送融合,具体效果见下图: 文件结构如图所示 主程序代码 #include"stdafx.h" #include<opencv2/phot ...

  5. leetcode 数据库练习 - 1205 每月交易I和II

    每月交易(一) Table: Transactions +---------------+---------+| Column Name | Type |+---------------+------ ...

  6. -bash: rvictls: command not found

    下载安装Command Line Tools for Xcodehttps://developer.apple.com/download/more/?name=for%20Xcode%20-# 显示包 ...

  7. 阻塞IO与非阻塞IO、同步IO与异步IO

    在学习nodejs时,了解到nodejs的一个重要特征是非阻塞IO,且nodejs中的所有IO都是异步的.既然有非阻塞IO.异步IO,那么必然就有阻塞IO.同步IO了,为了彻底搞清楚这几个概念,在网上 ...

  8. 【Gamma】Scrum Meeting 3

    目录 写在前面 进度情况 任务进度表 Gamma阶段燃尽图 照片 写在前面 例会时间:5.27 22:30-23:30 例会地点:微信群语音通话 代码进度记录github在这里 临近期末,团队成员课程 ...

  9. SpringMVC(十五):Dispatcher的重要组件之一MultipartResolver(StandardServletMultipartResolver和CommonsMultipartResolver)的用法

    MultipartResolver组件 从Spring官网上可以看到MultipartResolver接口的定义信息: public interface MultipartResolver A str ...

  10. JCR分区 | 中科院SCI期刊分区表

    LetPub查询系统,非常方便,分区影响因子都可以查询,还有投稿经验可以参考. SCI全称是Science Citation Index(科学引文索引) 科睿唯安JCR分区(Journal Citat ...