static关键字

局部变量

  1. 局部变量

    局部变量是最常见的量,编译器不会对其进行初始化,除非对其显式赋值,不然初始值是随机的。

    普通局部变量存储在栈空间,使用完毕后会立即被释放。

  2. 静态局部变量

    静态局部变量由static修饰,申明时就必须初始化,就算未被初始化编译器也会将它初始化为0。静态局部变量存储于进程全局数据区,即使函数返回,他的值也不会变。

    void f(){
    int n = 0;
    cout<<n<<endl;
    n++;
    cout<<n<<endl;
    cout<<"------------"<<endl;
    }
    void S(){
    static int n = 0;
    cout<<n<<endl;
    n++;
    cout<<n<<endl;
    cout<<"------------"<<endl;
    }

    函数S与f唯一的不同就是n为局部静态变量,但是S结束后n的值被保留,f结束后n被释放。

    全局变量

    全局变量定义在函数体外部,编译器会自动对其进行初始化并且将其存储在栈区。

    普通全局变量对整个工程可见,即其他文件使用extern外部申明后可直接使用。也就是说其它文件中不能再有名字相同的变量了。

    静态全局变量只针对本文件可见,其他文件无法访问。

    使用静态全局变量可使该变量只在本文件中可见,能有效降低程序模块的耦合,且不会误会使用

    静态函数

    静态函数与静态全局变量相似,在其他文件中不可见。普通函数在另一个文件中甚至不需要extern就能被使用。

    面向对象

    静态数据成员

    在类内数据成员申明前加上static,就成了静态数据成员。有如下特点:

    • 静态数据成员存储在全数据区,在定义时分配存储空间,因此不能在类中定义。
    • 静态数据成员是类的成员,无论定义了多少类的对象,只有一份拷贝,且对所有类的对象可见。对于非静态数据成员,有多少类的对象就有多少分拷贝。
    • 静态数据成员不属于任何类,在没有对象(类的实例)时,就能对其进行操作。
    • 静态数据成员初始化格式: 数据类型 类名::静态数据成员名 = 值;
    • 类的静态数据成员的两种访问方式: 类名.静态数据成员名 或者 类名::静态数据成员名

    静态数据成员相对全局变量的优势

    1. 不会进入命名空间,不与其他文件的变量名冲突
    2. 静态数据成员可以是private的

    静态成员函数

    与静态数据成员相似,静态成员函数不依附于类的对象,特性如下:

    1. 静态成员函数没有this指针,不能访问类的非静态数据成员,也不能访问类的非静态成员函数,它只能调用其他的静态成员函数。
    2. 出现在类体外的函数定义不能指定关键字static。
    3. 非静态成员函数可以自由访问静态数据成员和静态成员函数。

参考链接:

  1. c语言中static关键字用法详解

C++面试常见问题——09static关键字的更多相关文章

  1. C++面试常见问题——08const关键字

    const 类内定义 类型名 函数名(参数列表) const{ ​ //函数体: } 类外定义 类内申明 类型名 函数名(参数列表): 类外定义 类型名 类名::函数名(参数列表){ ​ //函数体: ...

  2. 2019最新最全Java开发面试常见问题答案总结

    2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...

  3. Java后台面试 常见问题

    Java后台面试 常见问题   从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...

  4. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  5. MySQL索引知识点&面试常见问题

    来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...

  6. python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题

    笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...

  7. C++ 复习要点、面试常见问题总结

    本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有: 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, n ...

  8. JAVA工程师面试常见问题集锦

    集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解     ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...

  9. java 美团面试常见问题总

    一 基础篇 1. System.out.println(3|9)输出什么? 2. 说一下转发(Forward)和重定向(Redirect)的区别 3. 在浏览器中输入url地址到显示主页的过程,整个过 ...

随机推荐

  1. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  2. uniGUI之学习方法(18)

    官方例子D:\Program Files\FMSoft\Framework\uniGUI\Demos\Desktop 在Design里Main上右键,View as Form看到变化的属性. 看出变化 ...

  3. OSI参考模型对网络排错的指导

    问题 当我们遇到网络故障的时候,比如连不上网.打开浏览器无法正常访问等问题的时候,我们应该怎么排查呢? 我们首先想到的是物理层,因为在OSI参考模型中物理层是在最低端.最基础. 物理层排查 主要查看连 ...

  4. Subtitles

    1. 字幕Subtitles 2. 字幕类型 3. 字幕格式 4. 常用文本字幕 5. 字幕编辑器 6. 字幕编辑器比较 1. 字幕Subtitles https://en.wikipedia.org ...

  5. tomcat项目已存在错误

    Could not publish server configuration for Apache Tomcat v8.0-1 at localhost.Multiple Contexts have ...

  6. Maven项目- "null" 的java.lang.reflect.InvocationTargetException 解决方法

    异常显示: 解决方法:

  7. SSH框架搭建 笔记 (含spring注解驱动)

    分类: web 开发2014-04-27 12:33 354人阅读 评论(0) 收藏 举报 框架springinterface注解 好久没有搭建框架了,今天整理下以前的知识,整合下SSH,没想到手生了 ...

  8. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类

    interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...

  9. Deepctr框架代码阅读

    DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考. 我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手.在读代码的过程中 ...

  10. 201705 Ruby基础拾遗

    Mixin override 异常处理 super 与super() 使用%()处理需要string interpolation但同时也需要" "(double quote)的状况 ...