java中static关键字的作用_C++ static关键字到底有什么作用
在文章开头先写总结吧,省的文章太长大家看的又晕。简单总结下来static关键字具有以下两点作用:改变变量的生命周期和限定作用域
1、改变变量的生命周期
我们都知道在函数中申明的局部变量在函数调用完成后即会被释放,但是由static申明的局部变量的生存周期是长于函数的,也就是说即使函数调用结束后该变量的内存也不会被释放。下面我们直接看代码:
#include
#include
void func()
{
int i = 1 ;
static int i_static = 1;
i ++ ;
i_static ++ ;
std::cout<
}
int main()
{
std::cout<
func();
std::cout<
func();
system("pause");
}
我们运行起来看结果:
first run:
i:2
i_staic:2
sencond run:
i:2
i_staic:3
这样就很清楚了吧:i是普通局部变量的申明方式,在每次函数调用时都会重新分配内存重新初始化,在函数结束后该内存就会被自动释放。但是static声明的局部变量随着第一次函数的调用而初始化,却不随着函数的调用结束而销毁,而是一直存在直至程序结束。具体原理是什么这个就牵涉到C++程序内存的分配原则了。有兴趣的朋友可以关注小编,下一篇为大家详细讲解。
2、限定作用域
用static申明的变量和函数作用域都仅限本文件。关于限定作用域必须得结合C++的另外一个关键字‘extern’来讲解(修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。关于extern关键字的作用,关注小编后续为大家分享)。好,废话不多说直接上代码(程序猿就是这样,看代码比看文字舒服多了,嘿嘿)
这里有两个 .Cpp 文件其中a.cpp中代码如下:
#include
int test01 = 10 ;
static int test02 = 11 ;
void func1()
{
std::cout<
}
static void func2()
{
std::cout<
}
在这里定义了两个变量(一个静态一个非静态)和两个函数(一个静态一个非静态),然后再另外一个‘源.cpp’中引用他们,我们看运行结果是什么样的(注意看注释的代码)
using namespace std ;
extern int test01 ;
//extern int test02 ;
extern void func1();
extern void func2();
int main()
{
cout<
//cout<
func1();
//func2();
system("pause");
}
按照现在的代码运行结果是:
10
no static func"
但是当我将注释的代码放开然后编译运行就会报错:
这是因为在extern在寻找test02和func2的时候在a.cpp中被static给屏蔽掉(因为static的作用就是限定test02和func2的作用域只是作用于本文件即a.cpp文件)
好了,现在大家应该对于static的作用已经有了很全面的认识了吧!希望我的分享能够帮助大家,祝大家长发飘飘~~~
java中static关键字的作用_C++ static关键字到底有什么作用相关推荐
- 39.在Java中定义一个不做事且没有参数的构造方法的作用?
1 在Java中定义一个不做事且没有参数的构造方法的作用 Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会 调用父类中"没有参数的构造方法&quo ...
- [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递
参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型 值传递:引用类型,地址值传递,所 ...
- java中main方法前的public static void及其后面的(String[] args)【笔记自用】
为什么Java的main方法必须是public static void? 一. void 如下,像C, C++一样,将返回值类型改为int,再返回一个0,虽然编译通过,但是运行时会报错. 找到一种可理 ...
- java中静态代码块的用法 static用法详解(转)
(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程 ...
- java中静态代码块的用法 static用法详解
(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程 ...
- java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
合法标识符 Java语言中,对于变量,常量,函数,语句块均有名字,我们统统称之为Java标识符.标识符是用来给类.对象.方法.变量.接口和自定义数据类型命名的. 组成:Java标识符由数字,字母和下划 ...
- java中finally意思_Java学习之finally关键字总结
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- Java中的覆盖和隐藏以及final关键字
Java覆盖和隐藏 (1) 变量只能被隐藏(包括静态和非静态),不能被覆盖: (2) 可以用子类的静态变量隐藏父类的静态变量,也可以用子类的非静态变量隐藏父类的静态变量,也可以用非最终变量(final ...
- 详细对比java中的 final,finally, finalized关键字
文章目录 final 1. 修饰类 2 修饰方法 3 修饰变量 finally 1.finally不执行的两种情况 finalize final 在java中,final可以用来修饰类,方法和变量(成 ...
- java volatile lock_Java并发学习笔记 -- Java中的Lock、volatile、同步关键字
Java并发 一.锁 1. 偏向锁 1. 思想背景 来源:HotSpot的作者经过研究发现,大多数情况下,锁不仅不存在多线程竞争,而且总是由同 一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁 ...
最新文章
- 【机器视觉】 HDevelop语言基础(二)-变量和表达式
- 企业架构 - ADM方法概要介绍
- 通过显示当前 python 程序占用的内存大小来比较生成器和迭代器(转载)
- 2016-6-28 工作总结
- CSS3-06 样式 5
- html 中avi视频插件,JDG让一追二击败V5!Kanavi降维打击,逆版本选英雄不按常理出牌...
- 后端接口如何提高性能?从MySQL、ES、HBASE等技术一起探讨下!
- 我不是bug神(JVM问题排查)
- java的获取声音振幅_录音获取声音振幅波形显示
- GeoTools使用之JTSFactoryFinder接口
- 绘制完成的cad图纸文件应使用哪一款看图软件进行查看?
- 2019寒假作业一:PTA7-1 打印沙漏
- [JSOI2009]瓶子和燃料
- python实验总结与分析_Python实验报告七
- 计算机硬盘坏的原因,硬盘损坏的原因有哪些 硬盘正确使用方法介绍
- 简单聊聊MD5和SHA-256加密
- Visual C++中的AFX前缀
- mfc,WM_CTLCOLOR,WM_PAINT
- K8S集群应用市场安装部署:第一篇
- [论文阅读] Action Semantics Network: Considering the Effects of Actions in Multiagent System
热门文章
- Redis复制与可扩展集群搭建
- sync Command in Unix
- 网站SEO优化--Flash站优化方法
- 每个字符旋转随机角度的图象验证码 V2.0
- 【Tensorlayer系列】深度强化学习之FrozenLake介绍及表格型Q学习求解
- 智能优化算法:足球联赛竞争算法-附代码
- 神经网络工具箱——nn.funtional、初始化策略
- 计算机网络技术期末应用试卷,中专学校2016年《计算机网络技术与应用》期末考试题(考试卷与答案)...
- 简便方法搭建Harbor镜像仓库
- BerryBoot实现树莓派多系统切换