热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

extern与static的用法与区别

1.extern的用法:extern可以声明其他文件内定义的变量。在一个程序里,一个对象只能定义一次,它可以有多个声明,但类

1.extern的用法:
extern可以声明其他文件内定义的变量。
在一个程序里,一个对象只能定义一次,
它可以有多个声明,但类型必须完全一样。
如果定义在全局作用域或者名字空间作用域
里某一个变量没有初始化,它会被按照默认方式初始化。
将变量或函数声明成外部链接,即该变量或函数名在其
它函数中可见。被其修饰的变量(外部变量)是静态分配
空间的,即程序开始时分配,结束时释放。
在C++中,还可以指定使用另一语言链接,需要与特定的
转换符一起使用。
extern “C” 声明语句
extern “C” { 声明语句块 } 
extern 表明该变量在别的地方已经定义过了,在这里要使
用那个变量.
static 表示静态的变量,分配内存的时候, 存储在静态区,
不存储在栈上面.
static 作用范围是内部连接的关系,和extern有点相反.
它和对象本身是分开存储的,extern也是分开存储的,
但是extern可以被其他的对象用extern 引用,而static 
不可以,只允许对象本身用它


2.static的用法: 
静态变量作用范围在一个文件内,程序开始时分配空间,
结束时释放空间,默认初始化为0,使用时可以改变其值。 
静态变量或静态函数只有本文件内的代码才能访问它,
它的名字在其它文件中不可见。 
用法1:函数内部声明的static变量,可作为对象间的一种
通信机制 
如果一局部变量被声明为static,那么将只有唯一的一个
静态分配的对象,它被用于在该函数的所有调用中表示这
个变量。这个对象将只在执行线程第一次到达它的定义使
初始化。 
用法2:局部静态对象 
对于局部静态对象,构造函数是在控制线程第一次通过该
对象的定义时调用。在程序结束时,局部静态对象的析构
函数将按照他们被构造的相反顺序逐一调用,没有规定确
切时间。 
用法3:静态成员和静态成员函数 
如果一个变量是类的一部分,但却不是该类的各个对象的
一部分,它就被成为是一个static静态成员。一个static
成员只有唯一的一份副本,而不像常规的非static成员那
样在每个对象里各有一份副本。同理,一个需要访问类成员
,而不需要针对特定对象去调用的函数,也被称为一个static
成员函数。 
类的静态成员函数只能访问类的静态成员(变量或函数)


推荐阅读
  • 本文探讨了C++编程语言中声明与定义的区别,以及如何通过内部连接和外部连接来组织源文件,确保代码的正确链接与编译。文章详细解析了不同类型、变量、函数以及类的连接属性,并提供了实用的示例。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • Description“第一分钟,X说,要有矩阵,于是便有了一个里面写满了\(0\)的\(n\timesm\)矩阵。第二分钟,L说,要能修改,于是便有了将左上角为\((a,b)\) ... [详细]
  • 1.增加视图函数#Http:127.0.0.1booksdefshow_books(request):booksBookInfo.objects.all()returnrend ... [详细]
  • Flowable系列教程:运用ProcessEngineConfigurator实现高级流程引擎配置
    本文探讨了通过ProcessEngineConfigurator接口实现对Flowable流程引擎的高级配置方法。这种方法允许开发者通过自定义配置器来增强或修改流程引擎的行为。 ... [详细]
  • 任务,栈, ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • 修改Linux登录欢迎信息
    编辑etcmotd文件(没有自己创建即可)▽_.._,------------.,'`.(HelloBoy!)__)__`\`-,----------'((`- ... [详细]
  • 智慧城市建设现状及未来趋势
    随着新基建政策的推进及‘十四五’规划的实施,我国正步入以5G、人工智能等先进技术引领的智慧经济新时代。规划强调加速数字化转型,促进数字政府建设,新基建政策亦倡导城市基础设施的全面数字化。本文探讨了智慧城市的发展背景、全球及国内进展、市场规模、架构设计,以及百度、阿里、腾讯、华为等领军企业在该领域的布局策略。 ... [详细]
  • R语言基础入门指南
    本文介绍R语言的基本概念,包括其作为区分大小写的解释型语言的特点、主要的数据结构类型如向量、矩阵、数据框及列表等,并探讨了R语言中对象的灵活性与函数的应用。此外,文章还提供了关于如何使用R进行基本操作的示例,以及解决常见编程问题的方法。 ... [详细]
  • 本文总结了MySQL的一些实用技巧,包括查询版本、修改字段属性、添加自动增长字段、备份与恢复数据库等操作,并提供了一些常见的SQL语句示例。 ... [详细]
  • Web前端性能提升指南:简化JavaScript与消除重复脚本
    本文为Web前端性能优化系列的第七篇,重点探讨简化JavaScript代码及清除重复脚本的方法。通过这些技术,可以显著提高网页加载速度和用户体验。了解更多信息,请参阅我们的完整指南:Web前端性能优化。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
  • 解决Redis大Key问题的有效策略
    本文探讨了Redis中大Key的问题及其解决方案。大Key是指Redis数据库中占用大量内存的键值对,通常指字符串类型超过10KB的数据。文章详细分析了大Key的影响及检测方法,并提出了有效的处理措施。 ... [详细]
author-avatar
boybeta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有