在 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. Zifencei扩展

    fence 指令对外部可见的访存请求,如设备 I / O 访问,内存访问等进行串行化.外部可见是指对处理器的其他核心.线程,外部设备或协处理器可见. fence.i 指令同步指令和数据流.在执行 fe ...

  2. android 第三方开源库 学习汇总之Butter Knife

    如果直接在App中使用,那么只需要在app的build.gradle中添加即可. android { ... // Butterknife requires Java 8. compileOption ...

  3. Solr搜索器的特性及相关操作

    一.搜索处理器简介 所有的请求处理器都实现一个Java类,本例实现了solr.SearchHandler.在运行时,solr.SearchHandler被解析为内置的Solr类org.apache.s ...

  4. thinkphp整合系列之极验滑动验证码geetest

    给一个央企做官网,登录模块用的thinkphp验证码类.但是2019-6-10到12号,国家要求央企检验官网漏洞,防止黑客攻击,正直贸易战激烈升级时期,所以各事业单位很重视官网安全性,于是乎集团总部就 ...

  5. OGG 源端与目标端 约束不一致

    需求: 请在生产库执行下面的脚本 --删除主键并新增复合主键              alter table XXXXX  drop constraint PK_USERCHNL cascade; ...

  6. Odoo search 搜索视图详解与搜索视图工作原理

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html 搜索视图 搜索视图的search标签本身没什么属性可以使用,只要是<searc ...

  7. sql字符转义

    /** * sql 内的like % 代表一个或多个字符, _代表一个字符,这都是需要转义的 * @param s * @return */ public static String escapeSp ...

  8. Linux(Centos7.6)下安装Gitlab详细教程

    Gitlab搭建操作步骤: 1.查看Linux系统版本确认gitlab需要使用的安装包类型 使用命令:cat /etc/redhat-release CentOS Linux release 7.6. ...

  9. 用 np.logspace() 创建等比数列

    np.logspace( start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0, ) Docstring: Return ...

  10. 《Pro Continuous Delivery With Jenkins 2.0》随书笔记

    今天同时看完<Pro Continuous Delivery With Jenkins 2.0>, 这书与工作关系很大,但也是快速翻翻. 本书着重点jenkins高可用环境搭建,与gith ...