C++面试常见问题——09static关键字
static关键字
局部变量
局部变量
局部变量是最常见的量,编译器不会对其进行初始化,除非对其显式赋值,不然初始值是随机的。
普通局部变量存储在栈空间,使用完毕后会立即被释放。
静态局部变量
静态局部变量由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,就成了静态数据成员。有如下特点:
- 静态数据成员存储在全数据区,在定义时分配存储空间,因此不能在类中定义。
- 静态数据成员是类的成员,无论定义了多少类的对象,只有一份拷贝,且对所有类的对象可见。对于非静态数据成员,有多少类的对象就有多少分拷贝。
- 静态数据成员不属于任何类,在没有对象(类的实例)时,就能对其进行操作。
- 静态数据成员初始化格式: 数据类型 类名::静态数据成员名 = 值;
- 类的静态数据成员的两种访问方式: 类名.静态数据成员名 或者 类名::静态数据成员名
静态数据成员相对全局变量的优势
- 不会进入命名空间,不与其他文件的变量名冲突
- 静态数据成员可以是private的
静态成员函数
与静态数据成员相似,静态成员函数不依附于类的对象,特性如下:
- 静态成员函数没有this指针,不能访问类的非静态数据成员,也不能访问类的非静态成员函数,它只能调用其他的静态成员函数。
- 出现在类体外的函数定义不能指定关键字static。
- 非静态成员函数可以自由访问静态数据成员和静态成员函数。
参考链接:
C++面试常见问题——09static关键字的更多相关文章
- C++面试常见问题——08const关键字
const 类内定义 类型名 函数名(参数列表) const{ //函数体: } 类外定义 类内申明 类型名 函数名(参数列表): 类外定义 类型名 类名::函数名(参数列表){ //函数体: ...
- 2019最新最全Java开发面试常见问题答案总结
2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...
- Java后台面试 常见问题
Java后台面试 常见问题 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...
- C++面试常见问题——01预处理与宏定义
C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...
- MySQL索引知识点&面试常见问题
来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...
- python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题
笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...
- C++ 复习要点、面试常见问题总结
本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有: 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, n ...
- JAVA工程师面试常见问题集锦
集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解 ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...
- java 美团面试常见问题总
一 基础篇 1. System.out.println(3|9)输出什么? 2. 说一下转发(Forward)和重定向(Redirect)的区别 3. 在浏览器中输入url地址到显示主页的过程,整个过 ...
随机推荐
- CR LF CR/LF
CR:Carriage Return,对应ASCII中转义字符 '\r' (0x0D),表示回车LF:Line Feed,对应ASCII中转义字符 '\n' (0x0A),表示换行CRLF:Carri ...
- Golang 如何交叉编译
Golang 支持交叉编译,即在一个平台上生成另一个平台的可执行程序.方法如下: Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux G ...
- java-jpa-criteriaBuilder使用
一个复杂的查询例子(包含常用的所有查询方法) CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); //查询结果所 ...
- redis之常见操作
目录 redis的常见操作 1. redis客户端登录方式 2. 设置密码 3. 获取redis的配置 4. redis键(key) 语法 实例 Redis keys (黄色为重点) redis的常见 ...
- darknet简述
概述 darknet官网:https://pjreddie.com/darknet/ https://github.com/AlexeyAB/darknet Darknet是一个比较小众的深度学 ...
- day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)
1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...
- Linux查看某个文件 单个字符的 个数
查看 *****.gz 文件下的 'Cm Dn' 单词有多少个 cat *******.gz |grep 'Cm Dn' |wc -l
- intent 跳转
一.不需要返回值的跳转 Intent intent=new Intent(); intent.setClass(目前的acitivy.this, 目标activity.class); startAct ...
- Day10:关于桃子的和关于游戏新的设想(顺手做个记录孩子吃喝拉撒的工具)
公历2015年6月3日~ 北京时间晚上8:42~ 在美中宜和~ 一个叫桃子的小美女出生了! 没错!小桃子终于出生了!真心不容易啊! 6月3日 03:00 AM 老婆推我,叫我起来,她说她肚子疼,还想上 ...
- Day3:关于地形生成
---恢复内容开始--- 今天桃子好像还是没什么动静,不过媳妇倒是有一点见红~ 希望这是马上要出来的前兆了~ 桃子都已经晃点我俩好多回了~ 已经都快习惯来她这个狼来了的征兆了~ ----------- ...