C/C++ static关键字的使用

实例详解C/C++中static与extern关键字的使用 通过一次项目实践来详细讲述static与extern两关键字的使用。 阅读详情

title: C/C++ static关键字的使用
date: 2024-06-30 18:21:50
tags:
cover: https://picbed0521.oss-cn-shanghai.aliyuncs.com/blogpic/static.png


原文见我的网站: www.supdriver.top

因为static的用法又多又杂,值得单出一篇博客用以汇总

C/C++ 通用用法

局部变量->全局属性

当对原本声明在函数栈帧里的变量使用static修饰时,该变量的存储空间会改变到静态区,不会随着函数栈帧的销毁而销毁。

初始化:初次调用声明语句时会执行声明操作,而之后再执行到该语句处时会自动跳过。

作用范围:与不加static时的作用范围相同,还是局部可用

销毁:和全局变量一样在main函数的栈帧销毁时一并销毁

全局变量->限制访问

原本同级文件夹下的源文件可以用extern关键字互相获取全局变量,但如果用static修饰本地全局变量,那么这个全局变量只能在本文件调用,而其它文件看不到它

全局函数->限制访问

原本同级文件夹下的源文件可以用extern关键字声明函数,然后去其它源文件的全局函数中寻找实现方式,但如果用static修饰本地全局函数,那么这个全局函数的实现只能在本文件调用,而其它文件看不到它

C++类和对象

成员变量->静态成员 (全局变量)

原本声明的成员变量在实例化后,属于由类实例化出来的对象,生命周期与所属对象相同,但在加了static后,该变量属于该类域中的全局变量,不再属于某个具体的对象

初始化: 因为已经不属于某一个对象,初始化也不能在类的接口中完成了,因此在类中声明static成员变量后,必须在全局区初始化类域中的成员变量。 #在main函数等非全局域中无法初始化

常见应用:引用计数

class A
{
public:
	A()
	{
		cnt++;
	}

private:
	static int cnt;
};

int A::cnt = 0;

成员函数->静态成员函数 (不含this指针)

一般声明在类中的成员函数的参数列表隐藏this指针,要调用函数时得用类实例化出的对象来调用,由这个对象提供this指针

而使用static修饰后的静态成员函数不含this指针,该函数属于整个类域,调用时使用类域调用

class A
{
public:
	A()
	{
		cnt++;
	}

static int getCNT()
{
    return cnt;
}

private:
	static int cnt;
};

int A::cnt = 0;

int main()
{
    A a,b,c;
    cout<<A::getCNT();//此时输出3
    return 0;
}
Unity多渠道APK打包:同一工程稳定输出不冲突安装包 Android应用多渠道分发是移动开发的基础场景,其核心在于解决包名唯一性、渠道可识别性与构建可重复性三大问题。原理上,Unity安卓打包本质是三阶段流程:生成Android工程、Gradle编译、APK签名,而包名冲突根源在生成阶段对PlayerSettings的强依赖。技术价值体现在规避人工配置失误、支撑CI/CD自动化、满足华为/小米等商店合规要求。典型应用场景包括应用宝、TapTap、B站等渠道独立包管理,以及AB测试、灰度发布等运营需求。本文聚焦Unity原生方案,通过BuildPlayerOpt 阅读详情

相关推荐

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3921

C/C++ 中static关键字的使用

C/C++ 中static关键字的使用

NASSTO的博客 1104

IEEE PHM 2012轴承数据实战:用LSTM预测剩余寿命的完整流程与调参心得

本文详细解析了如何利用IEEE PHM 2012轴承数据集和LSTM模型进行轴承剩余寿命预测。从数据预处理、特征工程到LSTM模型架构设计和调参技巧,提供了完整的实战流程。特别分享了FEMTO-ST数据集的处理方法、RUL标签构建策略以及提升预测精度的关键技巧,帮助工程师实现更准确的预测性维护。

weixin_31100517的博客 368

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)

本文将会循序渐进,先从C语言的static讲起,慢慢延申到C++,从易到难,每一步都会举一些通俗易懂的例子帮助大家理解(帮助自己理解,怕忘记😂),好了开始整活!

weixin_45031801的博客 18万+

ICG cell如何通过Latch结构消除与门clock gating中的glitch?

本文深入解析了ICG Cell如何利用Latch结构解决传统与门时钟门控中的毛刺问题。通过将电平敏感锁存器与门控与门结合,ICG Cell将使能信号的变化严格限制在时钟低电平的安全窗口内采样和锁存,从而在时钟有效沿期间提供稳定的控制信号,从根本上消除了因信号延迟不同步而产生的glitch,确保了门控时钟的纯净与电路功能的可靠性。

weixin_29234423的博客 468

python监听海康威视报警服务器

因为我使用海康威视摄像头是自带热成像的所以事件报警会上报两张图片,一张是RGB图像、另一张是热成像图像,因此使用。拿到的就是第一张RGB图像。可以点击测试,会显示。

qq_57018478的博客 1161

C/C++中static关键字的使用

C/C++中static关键字的使用 一.修饰变量 1.修饰局部变量 即在函数体中定义的变量,只能在这个函数中使用了,同一个文档中的其他函数用不了。并且即使这个函数执行完成之后,这个局部静态变量的值还是不会被销毁的,函数下次调用依然有效。 2.修饰全局变量 仅限于变量被定义的文件中使用,其他的文件即使使用extern也无法使用静态全局变量。并且其作用域其实就是从定义之处开始,到文件结尾处结束。在定义之处前面也无法使用该变量的。 #include <stdio.h> static int j;

Danny_llp的博客 247

系规备考论文:论IT服务规划设计

系规备考论文:论IT服务规划设计

liuxu324的博客 1145

static 关键字在 C/C++ 中的使用与作用对比

可以帮助管理作用域和链接,提高代码的封装性和模块化程度,避免不必要的命名冲突。在多文件的C/C++项目中,合理使用。

Kill优快云666的博客 427

AUTOSAR CP R18-10 架构总览与导航

AUTOSAR CP R18-10 架构总览 本文档系统整理了AUTOSAR CP R18-10版本的199篇技术规范,涵盖7大架构层级: 应用层(15篇):包含车身舒适、底盘控制、HMI、安全系统、动力系统等AI应用 RTE(1篇):虚拟功能总线规范 服务层(159篇):细分为系统服务(OS/ECU管理/加密)、存储服务、通信服务(CAN/LIN/Ethernet) ECU抽象层(20篇):I/O与通信硬件抽象 MCAL(41篇):微控制器驱动层 复杂驱动(14篇):CDD设计与SPAL支撑 规范模板(2

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 722

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9809

对C/C++中的static与extern关键字的使用

本篇文章是对C/C++中的static与extern关键字的使用进行了详细的分析介绍,需要的朋友参考下 一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。 (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话

u011403897的专栏 614

单反相机物镜设计[DG-10]

REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。

weixin_72050316的博客 600

C/C++中使用static关键字定义或声明静态对象

在C/C++中使用static关键字来定义或声明静态对象,主要有以下的应用场景: (1)static修饰局部对象,使其成为静态局部对象 将一个函数中定义的变量声明为static对象,那么在函数被多次调用的过程中,静态局部对象会持续存在并保持它的值。 (2)static修饰类成员,使其成为类静态成员 static即可以修饰类成员变量,也可以修改类成员函数,是他们成为类静态成员。类静态成员是与

@_囚徒-2018_的家园 2818

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

static关键字C/C++中的使用

C++中static关键字的作用 C++中的static关键字用于声明全局共享变量,位于内存中一块单独的全局变量区域内。static声明的变量会一直存在,C++的static在如果在代码块内,则声明的变量只能在代码块内使用,如果static声明不在任何函数内,则可以在此文件中使用。 一、static在面向过程中的应用 1、静态全局变量 内存分配在全局数据区(.bss未初始化.data初始化)、 未初始化的静态全局变量会初始化为0且只会初始化一次、 静态全局变量只能在文件内访问不能在文件外访问。 在其他文件中

qq_34796146的博客 679

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C/C++ static 关键字使用

在C语言中 在.c中(为什么是.c,后面注意事项会说明)定义全局静态变量,控制访问范围,仅仅局限在本文件中才能访问,即便是 extern 外部声明也不可以;这样一来就允许在多个源文件中定义相同的变量,且不受干扰。否则编译会报重复定义。同理修饰于函数。 在C++中 注意事项 在C/C++中,不推荐在头文件中定义static全局变量,如果在头文件中定义了static变量,被多个文件引用,编译可以...

fzzjoy的专栏 434

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C/C++语言关键字static与const使用方法

C/C++语言关键字static与const使用方法

m0_51144400的博客 445

【C/C++ 关键字 存储类说明符】 深入理解C/C++中的static关键字:它的作用、限制和使用技巧

static作用“改变生命周期” 或者 “改变作用域

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 678

C++ static小结

总结static关键字的作用定义static变量意味只能在本.c/.cpp文件中使用该变量,而不能被其他.c/.cpp文件使用。定义的static变量存储在静态区,所以只初始化一次,其生命周期较长,从程序开始直至结束。定义static函数,意味只能在本.c/.cpp文件中使用该函数,而不能被其他.c/.cpp文件使用,可防止命名冲突。(定义的全局变量或函数默认是extern的。)

surfaceyan的博客 584

C++ 中的static关键字使用场景

(1)函数体内作用范围为该函数体,该变量内存只被分配一次,具有记忆能力(内存分配在静态区,在第一次调用的时候分配内存,函数调用结束内存并不释放) (2)在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问;(模块,{}括起来的语句块都是,不同的文件也是不同的模块) (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模...

真诚是一种高品质的生活方式 2963

c/c++基础知识篇(一) ---关键字static的使用场景

关键字static的使用场景 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量,在静态存储区,整个程序运行期间一直存在,在声明他的文件之外是不可见的,作用域为定义之处到文件结束(修改标识符的链接属性) 在局部变量之前加上关键字static,局部变量就成为一个局部静态变量,在静态存储区,作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变(修

qq_44760112的博客 403

C++ 关键字《static》

1. 什么是static? static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)

qq_40041064的博客 1715

Identifier static syntax in C/C++

static关键字是C,C++中都存在的关键字,它主要有三种使用方式,其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同,本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 下面就这三种使用方式及注意事项分别说明 一、局部静态变量 在C/C++中,局部变量按照存储形式可分为三种auto,s...

weixin_30399797的博客 103

static在C/C++中的作用详解

本文详细介绍了static在C/C++中的作用以及使用方法,本文分两部分: 第一部分介绍extern在c语言中的作用; 第二部分介绍extern在c++中的作用; Source.cpp文件内代码 /*Source.cpp file*/ #include "Header.h" static int a = 1; int b = 1; //声明,也是定义 static int add1(int a...

qq_35118533的博客 588
上一篇: 归并排序算法实现
下一篇: vim基础指令集
supdriver
博客等级 码龄3年 192粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值