C++中的static使用

安卓手机游戏《英雄迷宫冒险》存档修改 警告 修改前务必备份存档文件夹。该游戏有自动删除存档的功能,有问题的存档会自动删除。 修改对应的游戏版本为1.5。 存档保存位置 内部存储\Android\data\com.xmmf.yxmgmx.taptap\files 该文件夹中文件如下: data.wsf:数据文件。 wsfSave0:第一个存档。 wsfSave1:第二个存档。 修改金钱的例子 先进游戏确认当前金钱数量。当前金钱是2498,然后退出游戏。 根据金钱数量计算出存档中的内容。2498的十六进制是9C2,存档中的内容在存档中搜索该数 阅读详情

C++的static可以控制存储和可见性。


static基本含义:

1、静态存储。在静态数据区上创建,而不是每次函数调用时在堆上产生。

2、控制连接。static控制名字的可见性(visibility),对于特定的编译单位来说是局部的,所以这个名字在这个文件单元或者类之外是不可见的。


1、静态存储

用法:

函数内的静态变量:可以在函数调用之间保留一个变量的值,由于静态变量存储在静态数据区中,可以在调用之间保持它的值。

如果没有为一个内部的静态变量提供一个初始值,编译器会确保在程序开始时他被初始化为0(转化为适当的类型)。对于函数中的静态变量,既然是为了隐藏,就在函数体内声明的时候定义:如 static char* s = NULL; ,初始化只且仅会在函数第一次调用时执行一次。


a) C++中的静态数据成员存储

class A{

    static int i;

public:
    // ...
};


之后必须在定义文件中为静态数据成员定义存储区:

int A::i = 1; 

A::i定义为私有的依然可以初始化,因为其只有定义时才可这么初始化,保证了绝对安全。如果静态数据成员是一个带构造函数的对象,可以调用定义的构造函数来代替 = ,如果没有,会调用默认的。

若为静态常量,可以在类体内定义。如static int i = 1;


当静态数据成员为数组时,初始化必须在外部进行定义。

如:

class X{
    int i;
public:
    X (int ii):i(ii){}
};

class Stat{
    static X x1;
    staic X xtable[];
};

X Stat::x1(100);

X Stat::xtable[]={X(1), X(2), X(3)};

int main(){
    Stat v;  
    //~
    return 0;
}

b) 静态成员函数

静态成员函数为类的全体对象服务,减少了全局名字空间的占用,需要用任何具体的对象。

class X{
public:
    static void f(){};
};

int main(){

    X::f();

    //~
}


当然也可以用对象来访问。

static 成员函数只能访问静态数据成员和静态成员函数。对于一个对象来说,当前对象的地址this被隐式地传递到函数,但静态成员函数没有this,所以无法访问一般的成员。


c)一个有趣的使用

可以把一个类的静态数据成员放到此类的内部,然后把构造函数和拷贝构造函数(手动增加)设置为私有的,这样一个类只有唯一的对象,可以访问,却不能产生任何新的对象。

class Egg{

    static Egg e;

    int i;
    Egg(int ii):i(ii){}
    Egg(const Egg&);// prevent copy-construction

public:

    static Egg* instance(){return &e};

    int val() const{ return i; }

};

Egg Egg::e(47);

int main(){

    // Egg x(1); //Error
     cout<<Egg::instance()->val()<<endl;
    //~
}



2、控制连接。

一般情况下,文件作用域内的所有名字(即不嵌套在类或者函数中的名字)对程序中的所有翻译单元来说都是可见的,也即是外部的(extern)。全局变量和普通函数都是外部连接。

若只想让一个变量在文件范围内是可见的,而不与外部的标识符冲突,可以声明为 static 对象或函数,这些名字是内部连接。


Python实战:3步搞定视频去重,告别重复文件烦恼(附完整代码) 本文提供了一套基于Python的视频去重实战方案,通过三步流程(抽帧、生成内容指纹、相似度比对)高效识别重复视频文件。文章详细介绍了使用dHash算法生成视频指纹的核心原理,并提供了完整的代码实现,帮助用户快速构建自己的视频去重工具,告别重复文件管理烦恼。 阅读详情

相关推荐

长鑫存储面试真题解析:DRAM工程师的工程直觉与产线思维

DRAM作为现代计算系统的底层存储基石,其性能与可靠性高度依赖半导体物理基础、工艺窗口控制和电路-系统协同设计。理解电荷保持机制、位线电容耦合效应、信号完整性约束等核心原理,是突破传统数字IC思维、构建真实产线语感的关键。在晶圆厂级工程实践中,TEM缺陷识别、BIST空间聚类分析、Retention失效定位等能力,直接关联良率爬坡与客户系统稳定性。本文聚焦长鑫存储一线技术面试中高频出现的工艺-电路-测试三维问题,融合‘电荷保持’‘信号完整性’等热词,还原DRAM工程师必备的系统性建模能力与闭环验证思维,覆盖

weixin_34293246的博客 337

Java基础习题(附答案)

1. 以下方法fun的功能是求两参数之积。(return  a*b)     int  fun ( int a,  int b )  {   __________________;       }  2. 以下方法fun的功能是求两参数之积。(return  (float)a*b)     float  fun ( int a,  double b )  {   _____________

望月思灵 3万+

BepInEx插件开发实战:用Visual Studio快速创建你的第一个Unity Mod(2024新版)

本文是2024年新版BepInEx插件开发实战指南,详细讲解如何使用Visual Studio快速创建你的第一个Unity Mod。内容涵盖专业开发环境搭建、插件生命周期解析、利用HarmonyX进行游戏代码注入、实现实时调试与热重载技巧,以及项目配置与打包发布全流程,助你从Mod使用者转变为创造者。

weixin_29002595的博客 340

解析static!(转)

解析static!(转)[@more@][size=18:7291e6e16b][color=darkblue:7291e6e16b][b:7291e6e16b]解析static![/b:7291e6e16b][/color:7...

congjukun0600的博客 168

HFSS本征模求解:谐振特性分析与工程实践

本征模求解是电磁仿真中的基础技术,用于分析无源谐振系统的固有特性。其核心原理是通过求解麦克斯韦方程组的特征值问题,获得谐振频率、品质因数(Q值)及电磁场分布等关键参数。在5G滤波器设计、雷达谐振腔优化等高频场景中,精确的本征模分析能有效避免模式干扰,提升器件性能。HFSS作为行业标准工具,提供了完整的本征模求解工作流,涵盖边界条件设置、模式识别、场分布可视化等关键环节。针对多模耦合、模式纯度评估等工程难题,结合参数化扫描和场重叠积分等高级技巧,可显著提升微波器件设计效率。

weixin_27918373的博客 336

CANoe基础讲解01:从零开始使用CANoe轻松搭建你的第一个CAN网络

本文是一篇CANoe软件入门实操指南,逐步演示了如何从零创建并运行一个CAN FD仿真工程。内容包括:启动软件、配置硬件通道与网络、加载DBC数据库、使用CAPL编写仿真节点发送CAN报文,最终启动测量并在Trace窗口中查看通信结果。通过七个清晰步骤,帮助初学者快速掌握CANoe基本操作,完成首个可运行的仿真网络搭建

车载网络小D的博客 1573

知识单元三 面向对象-2

1. 设 x、 y为已定义的类名,下列声明x类的对象x1的语句中正确的是( )。 [单选题] *static x x1;public x x1=new x(int 123);y x1;x x1=new x( );(正确答案)2. 类的设计要求它的某个成员变量不能被外部类直接访问。应该使用下面的哪些修饰符获得需要的访问控制? [单选题] *public不加修饰符protectedprivate(正确答案)3. 为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,

qq_64314976的博客 2003

【AI生成】市面上主流自组网厂家的技术及市场研究

经过对全球自组网产业技术特征与市场格局的系统分析,本文得出以下核心结论:技术演进呈现智能化与融合化双轨路径 当前自组网技术创新已突破传统组网架构局限,形成"协议优化-架构创新-场景适配"的递进式发展路径。国际厂商聚焦智能算法应用,如Silvus采用深度学习实现动态拓扑优化,传输时延较传统方案降低37%;国内企业则侧重异构网络融合,中国移动设计院提出的5G LAN架构使工业场景通信可靠性提升至99.99%。

qq_31310977的博客 1698

C++编程思想学习笔记

1。声明与定义:声明是向编译器介绍名字---标识符。而定义为名字分配存储空间。 定义也可以是声明。如果定义int x;之前,编译器没有发现标识符x,编译器则把这一标识符看成是声明并立即为它分配存储空间。我们常用的写法,int i;就属于这种"定义是声明的"情况,纯粹的变量声明应该使用extern关键字。函数声明extern可以省略,因为编译器可以通过函数名后面跟的是;还是{来判断是声明还是定义。

十八进 1595

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 244

关于static初始化的小例子

public class a { int m=print("qqqqqqqq"); static int q=print("qwertyu"); static int print(String s){ System.out.println(s); return 12;} public static void main(String[] args){ //a aa=new

m1111121的专栏 1116

【个人学习总结】CRC校验原理及实现

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 ..................

星Yeah 的博客 7968

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

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

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

总结static和const在c++中的使用

开始之前复习一下关于内存的相关知识 直接上其他大神的总结贴吧 C语言内存分布 1.static static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 static的内部机制: 静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。 这样,它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声...

ice_masters的博客 347

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++ static及static const在类中的使用说明

1. 【简言】 static 及const在c/c++中是非常重要的两个关键字,在函数及参数中都有广泛的使用。 2.【代码举例】 ps:请直接看代码是1 、2、3、4的说明即可。 #include <iostream> using namespace std; class tTest; int main() { tTest...

Soar_dream的博客 488

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C/C++中的static使用说明

1.C语言: a.static修饰的变量,初始化只执行1次,生命周期保持在程序结束才会释放(变量保存在全局数据区的静态变量区)。 b.static修饰的变量,只能在本文件中使用,不能被其它文件访问。 c.static修饰的变量,默认初始化0。 d.static修饰的方法,只能在该文件内访问,不能被其它文件访问。 2.C++: 静态成员数据和静态成员函数,属于类,不属于对象。 ...

quietbxj的博客 643

static和inline在C++头文件中的使用

先上例子: // foo.hpp #ifndef FOO_HPP #define FOO_HPP void foo() { // } #endif // a.cpp #include "foo.hpp" void func_a() { foo(); } // b.cpp #include "foo.hpp" void func_b() { foo(); } // main.cpp extern void func_a(); extern void func_b(); int...

nihao_2014的博客 1303

C++中static 的使用方式,以及与c中的static的区别

http://blog.youkuaiyun.com/hackbuteer1/article/details/7487694 c++中static有种使用方式:面向过程的static,面向对象的static。前者用于普通变量或函数,不涉及类。而后者出现在类中。 一:面向过程的static , 1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变...

weixin_34168880的博客 138

C++中的static的定义与使用

在C++中,关键字static可以用于多种场景,包括静态成员变量、静态成员函数、静态局部变量和静态全局变量。以下是关于C++中static的定义、使用方法和细节。static。

2301_80215285的博客 711

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

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

qq_34796146的博客 679

C++中的static使用方法

一、静态数据成员(static data members)    在介绍静态数据成员之前,我们先来看看普通的数据成员(data members):class complex { public: double real() const {return this -&gt; re;} //在成员函数的参数列表(小括号)中,有隐藏的参数this pointer,是不能写出来的。 private: ...

SUSU0203的博客 2539

C++ 中的 static_assert 编译期断言使用

在C++中,是一种编译期断言机制,允许开发者在代码编译阶段验证条件是否满足。若条件不满足,编译器将生成错误并终止编译过程。以下是关于的详细解析:有两种形式: 不带错误消息(C++17起): 核心特性 编译时验证:示例: 适用位置:示例: 错误消息:在模板编程中,确保模板参数满足特定条件: 2. 确保常量值符合预期 检查编译期常量或表达式: 3. 平台或配置检查 验证环境配置(如指针大小、编译器支持特性): 4. 自定义类型特征验证 结合SFINAE或类型特征库,检测类型属性: 高级用法

qq_36812406的博客 1481

C++中的全局变量extern,static的使用

1)编译单元(模块)   在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:   第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;   第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。   那么,错误可能在两个地方产生:   一个,编译时的错误,这个主要是语法错误;   一个,链接时的错误,主要是重复定义变量等。   ...

Jared_Chen的博客 1658

static关键字在C和C++中的使用方法

一、C语言的static关键字的两种使用方法 1)、用于函数内部修饰变量,即函数内的静态变量。这种变量的生存期长于该函数,是的函数具有一定的“状态”,使用静态变量的函数一般是不可重入的,也不是线程安全的,比如strtok() 2)用在文件级别(函数体外),修饰变量或函数,变量该变量或函数只能在文本可见,其他文件看不到,也访问不到该变量或函数。 二、C++语言的static关键字的四种用法

鱼思故渊的专栏 1434
上一篇: 类的内联函数
下一篇: Windows Active Dictionary与CSVDE介绍
typ2004
博客等级 码龄17年 48粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值