static关键字总结-C/C++

news2025/1/16 20:04:21

引言:由于怕忘记static的一些区别,今天来写一篇文章尽可能的覆盖到static在C/C++中的用法和易错点。

第一部分  C中的static

1. static修饰变量 

被修饰的变量只能被定义一次,如下代码,n经过循环后仍然还是10。

#include <stdio.h>
int main() {
	static int n = 10;
	for (int i = 0; i < 10; i++) {
		int n = 10 + i;
	}
	printf("n:%d", n);
	return 0;
}

 

2. static修饰静态全局变量

  • 静态全局变量被存储在数据区的 静态区(数据段)。
  • 静态全局变量链接属性变为内部链接作用域因此被限制在本文件,变量只可在本文件中被访问。
test.c
static int a = 0;
main.c
#include <stdio.h>
extern int a;
int main() {
	printf("a:%d\n", a);
	return 0;
}

 这里就会编译器就会报错,其在链接时,无法解析外部符号a.

3. static修饰函数

 与静态全局变量相似,静态函数为内部链接,只能在声明它的文件中被调用。 

 第二部分  C++中的static

1.  修饰类的成员函数

可以看出:编译器报错了,因为被静态修饰的成员函数无法访问除静态成员变量的成员变量。(它的形参少了一个this指针)

 

可以访问静态成员变量h 

2.  修饰类的成员变量 

上面,我们在Date 类中声明了一个static int h,但是C++规定,静态成员变量在类中只能声明,需要在类外面去初始化

 

 同时C++11规定除静态成员变量外,其他成员变量可以在类中声明并初始化,如下:

 访问静态成员变量同样需要突破类域和访问限定符。即不可以下面这样!

 

3. 修饰类的成员常量 

在上一篇实现string的文章中, 我们定义了一个静态成员常量 npos

class string{
public:
  typedef char* iterator; 
//
//
//
private:
  char* _str; // 用于保存字符串
  int _size; // 字符串长度
  int _capacity; // 容量
  static const size_t npos = -1; // 表示找不到
};

你可能会有疑问为啥这个可以在类中进行定义,好问题!

因为这是C++的规定,允许整型const static 可以在类的定义体中定义并初始化。另外,由于字符型其实就是整型,所以它也可以在类中进行定义初始化。

 ​​​

 

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

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

相关文章

springMVC中统一异常处理@ControllerAdvice

1.在DispatcherServlet中初始化HandlerExceptionResolver 2.controller执行完成后执行processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException),有异常则处理异常 3.ExcepitonHandlerExceptionResolver中执行方法doResolveHandlerMethodExceptio…

数据结构复盘——第八章:排序

文章目录 第一部分&#xff1a;各种排序方法的比较第二部分&#xff1a;插入排序1、直接插入排序2、折半插入排序3、希尔排序 第三部分&#xff1a;交换排序1、冒泡排序2、快速排序 第四部分&#xff1a;选择排序1、简单选择排序2、堆排序2.1 堆的概念2.2 堆的调整算法2.3 堆的…

计算机网络-计算机网络体系结构-网络层

目录 一、IPV4 IP数据报格式 *IP 数据报分片 *IPV4地址 分类 网络地址转换(NAT) 二、子网划分与子网掩码 *CIDR *超网 协议 ARP协议 DHCP协议 ICMP协议 三、IPV6 格式 IPV4和IPV6区别 地址表示形式 四、路由选择协议 RIP(路由信息协议) OPSF(开发最短路径优…

为什么高精度机器人普遍使用谐波减速器而不是普通减速器?

机器人作为一种能够代替人类完成各种工作的智能设备&#xff0c;已经广泛应用于工业生产、医疗卫生、军事防卫等领域。其中&#xff0c;机器人的关节传动系统是机器人运动的核心&#xff0c;而减速器作为关节传动系统中的重要组成部分部分&#xff0c;对机器人的性能和技术水平…

volatile-两大特性(可见性、有序性)、内存屏障

6.1 被volatile修饰的变量有两大特点 ● 特点&#xff1a;○ 可见性○ 有序性&#xff1a;有排序要求&#xff0c;有时需要禁重排● 内存语义&#xff1a;○ 当写一个volatile变量时&#xff0c;JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中○ 当读一个vola…

Zabbix“专家坐诊”第207期问答汇总

问题一 Q&#xff1a;不小心把host表删除了&#xff0c;怎么处理&#xff1f;现在使用的zabbix 4.0.3的server&#xff0c;agent是4.2.1&#xff0c;能不能不动agent的情况下升级server版本&#xff0c;重新部署&#xff1f; A&#xff1a;数据库有备份话恢复即可&#xff0c;…

当下流行的编程语言

在任何时候&#xff0c;一些编程语言都会把大量的开发人员变成热情的布道者&#xff0c;试图说服世界其他地方的人相信它的伟大。 当热起来的时候&#xff0c;这种语言可能会成为行业标准&#xff0c;但其他时候&#xff0c;这种受欢迎程度就会消失。 1、数据的由来 每年Stack…

关于vue2回显表格数据忽略中间空格补全

关于vue2回显表格数据忽略中间空格补全 发现问题解决 发现问题 发现回显数据中间空格忽略 解决 在全局中修改在页面内修改 主要案例主要是在页面内修改 ::v-deep .cell{white-space: pre; }

COMSOL超声换能器聚焦声场仿真

超声聚焦 超声聚焦广泛应用于各类工业设备与技术中&#xff0c;例如我们熟悉的无损检测&#xff08;NDT&#xff09;和医学成像。高强度聚焦超声&#xff08;HIFU&#xff09;是此技术的一项临床应用&#xff0c;它利用探头将大部分能量集中到目标组织区域&#xff0c;使组织发…

uniapp实现简单的九宫格抽奖(附源码)

效果展示 uniapp实现大转盘抽奖 实现步骤&#xff1a; 1.该页面可设置8个奖品&#xff0c;每个奖品可设置中奖机会的权重&#xff0c;如下chance越大&#xff0c;中奖概率越高&#xff08;大于0&#xff09; // 示例代码 prizeList: [{id: 1,image: "https://img.alicdn…

【好书推荐】深入理解现代JavaScript

作者介绍 T. J. Crowder是一位拥有30年经验的软件工程师。在他的整个职业生涯中&#xff0c;他至少有一半时间是在使用JavaScript从事开发工作。他经营着软件承包和产品公司Farsight Software。他经常在Stack Overflow上为人们提供帮助&#xff0c;他是十大贡献者之一和JavaScr…

Java身份证实名认证-阿里云API 【姓名、身份证号】

1. 阿里云API市场 https://market.aliyun.com/products/57126001/cmapi00053442.html?spm5176.2020520132.101.3.a6217218nxxEiy#skuyuncode47442000022 购买对应套餐 2. 复制AppCode https://market.console.aliyun.com/imageconsole/index.htm#/?_kl85e10 云市场-已购买服…

软件工程与计算总结(十八)代码设计

目标&#xff0c;编写高质量的代码&#xff0c;本章节只介绍在易读性、易维护性和可靠性方面的最基本的代码设计方法~ 一.设计易读的代码 如果编写的代码易读性不好&#xff0c;在维护阶段的多次阅读过程中&#xff0c;将会消耗维护人员大量的精力&#xff1b;研究实验表明&a…

提升品牌形象:利用OLED透明拼接屏进行品牌展示

在当今数字化时代&#xff0c;OLED透明拼接屏作为一项引人注目的新兴技术&#xff0c;正逐渐改变着各行各业的显示方式。 OLED透明拼接屏技术 OLED透明拼接屏采用有机发光二极管&#xff08;OLED&#xff09;技术&#xff0c;能够提供卓越的显示效果。 与传统的液晶显示屏相比…

ios UIDocumentPickerViewController 实现TEXT、DOC、PDF等文档读取

文章目录 一、前言二、iCould相关配置三、功能实现3.1 UIDocumentPickerViewController 选取控制器3.2 读取文件一、前言 最近正在研发的项目有一个需求: 允许用户将iCloud中的文档上传,实现文件的流转。 以前接触的项目对于资料类的上传大多是仅限于图片与视频。对于文档类…

WebDAV之π-Disk派盘 + 密码键盘

密码键盘是一款密码管理器,可以存储和管理需要受保护的数据。为方便日常使用,同时也是一款安全输入法,帮您安全便捷地填写账号密码、通用内容、卡包信息。 密码键盘使用军事级的 PBKDF2 有损加密算法保护您的根密码,使用军事级的 AES 加密算法保护您的存储数据。云端再额外…

车载视频如何转换视频格式

当你收集了多种视频想在车内进行播放&#xff0c;它们可能不会自动播放。你有可能会在屏幕上看到一条消息&#xff0c;显示“文件格式不受支持”&#xff0c;这是因为这些视频可能采用了你的汽车无法识别的格式。 那我们如何才可以转换为车载播放器上运行的最重要且最广泛使用…

【UE4 反射系统】 UCLAS UFUNCTION UPROPERTY 宏简单解析 持续更新

目录 0 引言1 C如何实现反射机制1.1 使用代码生成工具实现反射机制 2 UE4的反射系统2.1 ****.generated.h头文件2.2 GENERATED_BODY()2.3 反射宏 UCLASS 等2.4 UHT和UBT 3 基本宏的使用3.1 UCLASS3.2 UFUNCTION3.3 UPROPERTY &#x1f64b;‍♂️ 作者&#xff1a;海码007&…

nginx tomcat 动静分离

动静分离&#xff1a; 访问静态和动态页面分开 实现动态和静态页面负载均衡。 五台虚拟机 实验1&#xff0c;动静分离 思路&#xff1a; 需要设备&#xff1a;三台虚拟机 一台nginx 代理又是静态 两台tomcat 请求动态页面 在全局模块中配置upstream tomcat 新建location…

springboot书籍学习平台springboot48

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…