在 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 关键字的更多相关文章

  1. 浅谈Static关键字

    1.使用static关键字声明的属性为全局属性 未使用static关键字指定city之前,如果需要将Tom,Jack,Mary三人的城市均改成Beijing,需要再次声明三次对象的city为Beiji ...

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

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

  3. PHP的final关键字、static关键字、const关键字

    在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...

  4. Java Static关键字详解

    提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...

  5. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  6. Java中的static关键字解析

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

  7. c++中static关键字的用法总结

    类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...

  8. static关键字

    static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象. 1.static关键字的特点 a:随着类的加载而加载 b:优先于对象存在 (还 ...

  9. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

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

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

随机推荐

  1. android Gradle下载慢,使用阿里镜像

    在Project下的 build.gradle添加阿里镜像 buildscript { repositories { maven{ url 'http://maven.aliyun.com/nexus ...

  2. youtube-dll工具使用,很好用!!

    最近喜欢上youtube-dll这个插件,下载东西真的很好用,墙裂推荐,github地址如下 https://github.com/ytdl-org/youtube-dl 安装 1.Linux 1.1 ...

  3. 微信公众号 $GLOBALS['HTTP_RAW_POST_DATA']数据问题

    公司的微信公众号最近出现问题,所有的功能都不能用,一开始以为是微信公众号验证的问题,经过排查才发现是$GLOBALS['HTTP_RAW_POST_DATA']这里的问题,微信公众号会把用户的一些操作 ...

  4. 配置以https访问网站

    环境 centos7  nginx1.16.1 一.申请证书(已有域名) 进入阿里云控制台,点击域名(我已经弄好了,一开始是没有ssl选项) 点击免费开启ssl 点购买->选择免费版 购买成功后 ...

  5. 【EL表达式】EL从四大域中取数据

    一.EL技术 1.EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写. 2.EL从域中取出数据 ...

  6. OpenSSL 下载和私钥证书、CERTIFICATE证书生成

    openssl 是生成私钥和公钥证书的重要工具. Windows如何安装OpenSSL: 官网:https://www.openssl.org/community/mailinglists.html  ...

  7. AXIOS 的请求

    AXIOS 本质上等同于json 传值 1.引用 //引入axios import Axios from 'axios' //将axios挂载到 Vue原型上 Vue.prototype.$https ...

  8. 第04节-BLE协议抓包演示

    在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可 ...

  9. 201871010117-石欣钰《面向对象程序设计(Java)》第四周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  10. django 导出xls文件

    1.同目录下创建file_handle.py文件 file_handle.py import xlwt, datetime from xlwt import * import xlsxwriter # ...