static 的作用,static 在类中使用的注意事项(定义、初始化和使用),static 全局变量和普通全局变量的异同

news2024/11/26 13:37:19

目录

1. static 的基本作用

2. static 在类中的使用

2.1 静态成员变量

2.2 静态成员函数

3. static 变量在全局作用域中的使用

3.1 static 全局变量

3.2 普通全局变量

4. static 局部变量

5. static 全局变量与普通全局变量的异同


  • static 在类中的静态成员变量和成员函数使得这些成员属于类,而不属于类的实例对象。
  • static 修饰的全局变量限定了其作用域,仅限于当前源文件,避免命名冲突和命名空间污染。
  • static 局部变量只会初始化一次,并且在函数多次调用之间保持其值。

1. static 的基本作用

static 关键字的主要作用是控制变量或函数的生命周期、作用域和链接属性。

  • 生命周期static 修饰的变量在程序的整个运行过程中只会被初始化一次,并且其值会在整个程序运行期间保持不变。
  • 作用域static 影响变量和函数的可见性,决定它们在何处可访问。

2. static 在类中的使用

2.1 静态成员变量

  • 定义:在类中使用 static 修饰的成员变量属于类,而不属于类的对象。即所有类的实例对象共享同一个 static 成员变量。

  • 声明和定义:静态成员变量需要在类的外部进行定义,并且只能初始化一次。

class MyClass {
public:
    static int staticVar;  // 声明静态成员变量
};

int MyClass::staticVar = 0;  // 定义并初始化静态成员变量
  • 访问:静态成员变量可以通过类名或者对象名来访问。

MyClass::staticVar = 10;  // 通过类名访问
MyClass obj;
obj.staticVar = 20;       // 通过对象访问

2.2 静态成员函数

  • 定义:静态成员函数属于类本身,而不依赖于类的实例。静态函数只能访问静态成员变量,不能访问非静态的成员变量或成员函数。

class MyClass {
public:
    static void staticFunction() {
        // 只能访问静态成员变量
        staticVar = 10;
    }
    static int staticVar;
};
  • 调用:静态成员函数可以通过类名直接调用,也可以通过对象调用。

MyClass::staticFunction();  // 通过类名调用
MyClass obj;
obj.staticFunction();       // 通过对象调用

3. static 变量在全局作用域中的使用

3.1 static 全局变量

  • 作用域static 修饰的全局变量的作用域限制在定义它的源文件内,不能被其他源文件访问。这是为了隐藏实现细节,减少全局命名空间污染。

static int globalVar = 0;  // static 全局变量,仅限于当前文件访问
  • 生命周期static 全局变量在程序运行期间一直存在,并且只初始化一次。

3.2 普通全局变量

  • 作用域:普通的全局变量可以在程序的任何部分(如果声明了 extern)被访问,因此它可以跨源文件共享。

int globalVar = 0;  // 普通全局变量,可以在其他源文件中使用 extern 声明访问
  • 生命周期:普通全局变量和 static 全局变量一样,在程序的生命周期内始终存在。

4. static 局部变量

static 也可以用于局部变量,常见于函数内部。static 局部变量只会在第一次调用该函数时初始化,并且该变量在后续的调用中保持其值。

void func() {
    static int localVar = 0;
    localVar++;
    std::cout << localVar << std::endl;
}

在这个例子中,localVar 在第一次调用时被初始化为 0,之后每次调用时都将保持上一次的值。

5. static 全局变量与普通全局变量的异同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务&#xff0c;目标是自动识别图像中的对象类别。通过卷积神经网络&#xff08;CNN&#xff09;等…

mingw c++/qt使用grpc方法详细教程

1. RPC框架 RPC框架是什么 RPC 框架说白了就是让你可以像调用本地方法一样调用远程服务提供的方法,而不需要关心底层的通信细节。简单地说就让远程服务调用更加简单、透明。 RPC包含了客户端(Client)和服务端(Server) 业界主流的 RPC 框架整体上分为三类: 1> 支持多语…

Springboot课堂评测系统的设计与实现---附源码82642

目 录 摘要 Abstract 1 绪论 1.1 研究背景与意义 1.2 开发技术和开发特点 1.3论文结构与章节安排 2 课堂评测系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.…

MyBatis-pulsdruid数据源

MyBatis-Plus 是 MyBatis 的增强工具&#xff0c;主要用于简化数据库操作和提升开发效率。Druid 是阿里巴巴开源的数据库连接池组件&#xff0c;提供了高效的数据库连接管理和监控功能。将这两者结合使用可以更好地管理和操作数据库。以下是 MyBatis-Plus 和 Druid 数据源的总结…

数据重删技术

目录 一、名词介绍 二、重删概述 三、重删分类 四、源端重删 一、名词介绍 指纹&#xff1a;不同数据块数据通过哈希算法所生成的唯一标识。 重删率&#xff1a;&#xff08;1 - 实际备份数据量 / 已完成数据量&#xff09;* 100%。 重删卷&#xff1a;存放指纹库的物理卷。…

JAVA一键开启缘分之旅红娘相亲交友系统小程序源码

一键开启缘分之旅 —— 红娘相亲交友系统 &#x1f496; 初遇心动&#xff0c;一键启程 在这个快节奏的时代&#xff0c;找到那个对的人似乎成了一种奢侈。但别担心&#xff0c;有了“红娘相亲交友系统”&#xff0c;你的缘分之旅只需一键即可开启&#xff01;无需复杂的注册流…

【网页播放器】播放自己喜欢的音乐

// 错误处理 window.onerror function(message, source, lineno, colno, error) {console.error("An error occurred:", message, "at", source, ":", lineno);return true; };// 检查 particlesJS 是否已定义 if (typeof particlesJS ! undefi…

【Day10-配置文件日志多线程】

配置文件 介绍 配置文件 在企业开发过程中&#xff0c;我们习惯把一些需要灵活配置的数据放在一些文本文件中&#xff0c;而不是在Java代码写死我们把这种存放程序配置信息的文件&#xff0c;统称为配置文件 Properties 是一个Map集合&#xff08;键值对集合&#xff09;&am…

推荐系统的基础_协同过滤(CF)

协同过滤&#xff08;Collaborative Filtering&#xff09;是一种推荐系统算法&#xff0c;它通过分析用户之间的相似性或者物品之间的相似性来预测用户可能感兴趣的物品。协同过滤算法主要有两种类型&#xff1a; 1. 用户基协同过滤&#xff08;User-based Collaborative Filt…

OceanMind海睿思“一种业务驱动数据治理的方法和系统”获国家发明专利!

近日&#xff0c;中新赛克海睿思最新技术&#xff1a;一种业务驱动数据治理的方法和系统&#xff08;专利号ZL 202410567107.8&#xff09;&#xff0c;获得国家知识产权局的正式授权&#xff0c;并取得专利证书。 当前&#xff0c;现有的数据治理方法论和平台工具主要聚焦于数…

IDEA 常用插件推荐,美观又实用!

1、 TONGYl Lingma - Your Al Coding Assistant. Type less, Code more. 通义灵码&#xff0c;是一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&…

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型 2.1 jvm内存模型概览 二 实操案例 2.1 设置和查看栈大小 1.代码 /*** 演示栈中的异常:StackOverflowError** author shkstart* create 2020 下午 9:08** 设置栈的大小&#xff1a; -Xss (-XX:ThreadStackSize)** -XX:PrintFlagsFinal*/ public class S…

【C++】C++ STL 探索:List使用与背后底层逻辑

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现 本文将通过模拟实现List&#xff0c;从多个角度深入…

第J3周:DenseNet算法实战与解析(pytorch版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc; 本周任务&#xff1a; ●1.请根据本文 Pytorch 代码&#xff0c;编写出相应的 TensorFlow 代码&#xff08;建议使用…

《黑神话·悟空》背后的佛学义理探析

《黑神话悟空》不仅是一款备受期待的动作冒险游戏&#xff0c;其背后的深厚文化内涵&#xff0c;尤其是佛教义理的体现&#xff0c;更是吸引了不少玩家和佛学爱好者的关注。本文将通过对游戏剧情的解析&#xff0c;结合佛教思想&#xff0c;探讨《黑神话悟空》中所蕴含的哲学智…

冯·诺依曼体系结构

纯硬件的计算机结构应该就是输入设备——CPU——输出设备 冯诺依曼体系结构加入了存储器&#xff08;内存&#xff09; 因为数据是要在计算机体系结构中流动的&#xff0c;流动过程中对数据进行加工处理&#xff0c;数据从一个设备到另流动到另一个设备本质是一种数据拷贝。C…

HDFS常用命令及Python连接HDFS操作

目录 一、HDFS常用命令 二、Python连接HDFS操作 一、HDFS常用命令 HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;是Hadoop集群中的一部分&#xff0c;用于存储大量数据&#xff0c;并运行在商用硬件集群上。以下是HDFS中常用…

6款好用到离谱的宝藏软件,每一款都超出你的认知

你的电脑里有没有那种&#xff0c;无论重装多少次系统&#xff0c;都要第一时间安装的软件&#xff1f; 请把它的名字打在评论区&#xff01;本期分享6款&#xff0c;免费也能吊打付费的Windows电脑必装软件。 最大程度的增强Windows系统的功能&#xff0c;良心分享&#xff…

一文讲解多种GIS分析功能

GIS行业有很多分析功能&#xff0c;对于刚入行的新手有着足够的吸引力&#xff0c;其实有许多分析功能实现原理大差不差&#xff0c;比如模型压平&#xff0c;基于模型的淹没分析以及模型裁切。本文将以模型裁切为切入口进行介绍其中原理。 首先 &#xff08;立方体剖切示意图…

只需一个类文件,Erupt 可以能完成整个后台管理?这个低代码值得一试

只需一个类文件&#xff0c;Erupt 竟然能搞定整个后台管理&#xff1f;这个低代码值得一试 在纷繁复杂的后端开发世界里&#xff0c;Erupt 就像是一剂强心针&#xff0c;用一个 .class 文件就能实现后台管理功能&#xff0c;简直让人感叹“开发也可以这么简单&#xff01;”本文…