当前位置:首页 > 科技  > 软件

掌握C/C++中的静态变量与静态成员!

来源: 责编: 时间:2023-10-08 07:05:02 331观看
导读1. 静态变量1.1 C语言中的静态变量在C语言中,关键字`static`用于声明静态变量。静态变量只会在程序初始化时被赋值一次,之后在函数调用过程中保持不变。若在函数外定义了静态变量,其作用域将限制在当前文件内,只能被该文

1. 静态变量

1.1 C语言中的静态变量o9H28资讯网——每日最新资讯28at.com

在C语言中,关键字`static`用于声明静态变量。静态变量只会在程序初始化时被赋值一次,之后在函数调用过程中保持不变。若在函数外定义了静态变量,其作用域将限制在当前文件内,只能被该文件内的所有函数访问,而不能被其他文件中的函数所访问。它是一种局部的全局变量,仅被初始化一次。o9H28资讯网——每日最新资讯28at.com

1.2 C++语言中的静态变量o9H28资讯网——每日最新资讯28at.com

在C++中,静态变量可以成为类的数据成员。与非静态数据成员不同,每个对象都有一个副本,静态数据成员是类的一部分,只存在一个副本,被所有对象所共享。即使没有实例化对象,静态成员变量也可以使用,通过"类名::静态成员变量"的方式访问。o9H28资讯网——每日最新资讯28at.com

2. 静态成员函数

在类中,使用`static`修饰的函数被称为静态成员函数。它们属于类,而不属于对象,因此会被所有对象共享。与普通成员函数不同,静态成员函数没有`this`指针,因此无法访问非静态的函数和变量,只能访问静态的成员。o9H28资讯网——每日最新资讯28at.com

3. 静态数据成员的优势

相对于全局变量,静态数据成员有以下优势:o9H28资讯网——每日最新资讯28at.com

1. 作用域更为局限,仅限于当前文件,避免了命名冲突问题。o9H28资讯网——每日最新资讯28at.com

2. 静态数据成员可以被定义为私有成员,而全局变量不能,从而实现信息的隐藏和封装。o9H28资讯网——每日最新资讯28at.com

通过合理地运用`static`关键字,我们可以更灵活地管理变量和函数,使代码更具可维护性和可读性。o9H28资讯网——每日最新资讯28at.com

静态成员变量和静态变量在C++中具有特殊的初始化规则和用途。在本文中,我们将探讨为什么它们需要特殊的初始化方式以及如何正确使用它们。o9H28资讯网——每日最新资讯28at.com

为什么静态成员变量不能在类内初始化?

静态成员变量是属于类的一部分,但它们的初始化有一些独特之处。为什么不能在类内初始化静态成员变量呢?原因在于类的声明可能会在多处引用,每次引用都会初始化一次,分配一次空间。这与静态变量只能初始化一次,只有一个副本的性质冲突,因此静态成员变量只能在类外初始化。o9H28资讯网——每日最新资讯28at.com

为什么static静态变量只能初始化一次?

所有变量都只初始化一次。但是静态变量和普通自动变量的初始化方式和生命周期有所不同。静态变量被存储在全局区(静态区),其生命周期与程序一样长,它们只会在首次初始化时分配内存,并且不会在程序运行期间被销毁。而普通自动变量存储在栈区,它们的生命周期与函数调用相关,每次函数调用都会初始化一次,函数结束时销毁。o9H28资讯网——每日最新资讯28at.com

在头文件中定义静态变量是否可行?

在头文件中定义静态变量是不可行的。因为当你在头文件中定义一个static变量时,实际上对包含该头文件的每个源文件来说都定义了一个同名的静态变量。这会导致资源浪费,可能会引发编译错误或难以追踪的bug。因此,通常建议将静态变量的定义放在单独的源文件中,以避免这种问题。o9H28资讯网——每日最新资讯28at.com

静态变量什么时候初始化?

静态变量只会初始化一次,但可以多次赋值。它们在程序主函数执行之前已经由编译器分配好了内存空间。这意味着它们的初始化发生在程序的启动阶段,而不是在每次函数调用时。因此,无论你调用多少次包含静态变量的函数,它们只会在程序启动时进行一次初始化。o9H28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12274-0.html掌握C/C++中的静态变量与静态成员!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 分享Spring Data JPA的一些技巧和优秀实践

下一篇: Sixel:改变终端图像显示的革命

标签:
  • 热门焦点
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top