聊一聊const和static限定符

【百战面试-9】const和static 是 C/C++ 中的类型限定符,用于指定对象或变量不可被修改。常量变量 指针与const 函数参数 成员函数 返回值 的优势 提高代码可读性和安全性 允许编译器进行更多优化 帮助捕获编程错误 关键字 在不同上下文中有不同含义: 特点: 特点: 特点: C++11保证静态局部变量的初始化是线程安全的。全局常量 类静态常量 静态常量成员函数 关键区别 特性 主要作用 定义不可变性 控制存储期和可见性 变量生命周期 与普通变量相同 整个程序运行期间 阅读详情

const 是常量限定符,被const修改的变量,为其分配内存时,且同时必须为其值进行初始化。其后不能再被修改。
例如:
const int a;
当a定义在函数外时,即为全局变量时,那么 a为自动被初始化为0。
当a定义在函数内,即为局部变量时,那么const int a = 右值;//这样显示初始化才行。否则编译不过。

void func_1() {
	const int d = 10;
	int* j = (int*)&d;
	*j = 1;
	cout << __func__ << ": " << " d = " << d << ", *j = " << *j << endl;//func_1:  d = 10, *j = 1
}

代码分析:
const int d = 10;//这种定义的常变量,会在编译期被优化为,作用域范围内使用到变量d的地方,都替换为整型字面值10,但是对于对变量d取地址的地方不会被替换。
int* j = (int*)&d;//强制将常变量的地址类型,转为非常量类型指针。指针j指向常变量d。这是一种危险的做法,不建议。编译对上一句代码的优化,也是为防止会出现强制的情况。
*j = 1; //修改常变量d的值。
输出语句中的变量d,在编译阶段已被替换为了10。这就是为啥即使修改d中的值为1,打印出来的还是10.
在这里插入图片描述

void func_2() {
	int b = 10;
	const int d = b;
	int* j = (int*)&d;
	*j = 1;
	cout << __func__ << ": " << " d = " << d << ", *j = " << *j << endl;//func_2:  d = 1, *j = 1
}

const int d = b;//这种情况下d的值只有执行func_2()时才能确定,所以这里在编译期不会对其作用域范围内其他地方使用到变量d的地方进行替换。
所以最后,输出语句中打印的d是修改之后的。
在这里插入图片描述
注意:const修饰符,一般拥有修饰函数的形参,还有定义全局常量时用到。一般不会在函数内部来修饰变量使用。
在函数内部一个变量 虽然被const修饰符修饰,那他仍然是一个在栈上的局部变量。函数执行完毕后,它的内存也就是被释放了。

void func_3() {
	int a = 6;
	static int c = 7;
	const int d = 10;
	printf("地址a: %p\n",&a);
	printf("地址c: %p\n",&c);
	printf("地址d: %p\n",&d);
}
int main()
{
	func_3();//第一次调用
	func_3();//第二次调用
}

在这里插入图片描述
在这里插入图片描述

触摸延时灯课程设计 Multisim源文件下载: 实验名称:­­­­­­­­­­­­­­­­­­­ 课程设计1:触摸延时灯仿真设计 设计要求: 利用单稳态触发器设计触控延时灯,要求利用触发波形的边沿模拟触控点实现触发,触发后3秒灯亮,灯可以亮的时间可在5-10秒之间可调。 设计思路: 利用集成单稳态触发器CD4098设计简易的触摸延时灯电路。应用CD4098可以实现脉冲延时,原理图如下。4脚未触发信号输入端,可通过比较器对触摸产生的信号进行比较后再产生触发信号,使触发准确度得以提高。... 阅读详情

相关推荐

RL调参侠之BipedalWalker BipedalWalkerHardcore SAC

前几天用PPO训练了个很一般的agent: RL调参侠之BipedalWalker PPO 我看SpinningUp上面说PPO和SAC是两个领域里各自的State_of_the_art的方法,所以就打算跑SAC试试看,之前因为Open AI Five的原因,一直感觉PPO很牛掰,实际上现在很多自动驾驶的算法也是用PPO在跑,毕竟有一个“必定能够提升期望”的理论保证在这里,我理解这对做项目很大的诱惑。 不过我跑出来的结果明显是SAC更好。 调参侠时间 策略熵的权重alpha用的0.2,我一开始没有看SAC的

weixin_48370148的博客 2099

Java学习第六天2019_7_22限定符和静态修饰符

一、补充下节课内容: 1、对象的生命周期 (1)对象刚刚计算好对象内存大小,在堆内申请好空间,内部被初始化为0x0 (2)对象正在执行构造方法对属性初始化部分 (3)对象的可使用生命周期阶段 (4)对象被标记为垃圾,但可能还有被立即回收的时期 2、 (1)一个源文件中只能有一个public 类,该类的名称必须和文件名一样 (2)一个类会生成一个class字节码文件 3、this关...

weixin_43580746的博客 146

第1期技术: DQN算法原理及实现过程

利用神经网络近似值函数的方法表示为: V^(s,w)≈Vπ(s)q^(s,a,w)≈qπ(s,a) \hat{V}(s, w) \approx V_{\pi}(s) \\ \hat{q}(s, a, w) \approx q_{\pi}(s, a) V^(s,w)≈Vπ​(s)q^​(s,a,w)≈qπ​(s,a) 那么具体的工作过程是怎样实现的? 以及如何从端到端的过程,本文将讲解Deep Q Network(DQN, 而这正是由DeepMind于2013年和2015年分别提出的两篇论文《Playi

深度强化学习实验室:一个“开源开放、共享共进”的强化学习学术组织。 4953

static限定符

line 类中的 orign 成员被声明为 static ,这意味着它是类级别的成员,不是实例级别的成员。因此,所有的line类实例共享同一个orign成员。当删除static 关键字时会报错,这是因为试图在一个实例方法(Main方法)中访问一个非静态(实例成员)时,而这个成员却在类级别上被引用了。

m0_75031942的博客 495

告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比)

本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。

weixin_42538752的博客 231

C# 原生数字孪生的尝试

本文介绍了使用C#实现数字孪生的基本思路。首先从爱普生官网下载机器人3D模型,然后通过Blender创建并导出带动画的FBX模型。在WPF项目中,使用HelixToolkit.SharpDX等插件加载模型,通过Viewport3DX进行3D渲染。关键点是通过动画控制器接收真实设备信号来驱动模型动画,实现物理实体与虚拟模型的同步。文中提供了完整的代码实现,包括模型导入、动画播放控制等核心功能。该方法为构建数字孪生系统提供了一种可行的技术方案。

qq_33529095的博客 1329

C++限定符:

一、const No. 类型 语法 作用 1 const指针 类型* const 变量 = 初始值; 指针指向地址不能改变 2 指向const对象的指针 const 类型* 变量 = 初始值; 类型 const* 变量 = 初始值; 指针指向对象不能改变 3 指向const对象的const指针 const 类型* const 变量 = 初始值; 指针指向地址和对象不能改变 ...

三桂gg的博客 1321

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

本文介绍了WinForm开发中OpenFileDialog控件的关键属性及其应用。OpenFileDialog是.NET Framework提供的文件对话框控件,主要用于选择、打开文件操作。文章详细讲解了11个核心属性:AddExtension(自动补全扩展名)、AutoUpgradeEnabled(外观升级)、CheckFileExists/CheckPathExists(文件/路径存在验证)、DefaultExt(默认扩展名)、DereferenceLinks(解析快捷方式)、FileName/File

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1534

C++ day03(作用域限定符、this、static、const)

作用域限定符、关键字

dghbs的博客 1517

小白也能轻松部署 OpenClaw:OpenClaw可视化部署工具+OpenClaw可视化管理工具分享

分享一个OpenClaw可视化一键部署工具,帮你快速打造属于自己的AI助手 🚀

XiaoqiangClub的博客 6710

【2024/3/12 更新】Windows Server 2019 服务配置与管理汇总

本栏目一共介绍了17种Windows Server 2019 的服务配置与管理,为了方便大家阅读理解,特意总结了17种服务的一些内容。具体说明如下所示

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 2万+

const与static的区别

对于C/C++来说,就是只读的意思,只在声明中使用,意即其所修饰的对象为常量((immutable)),它不能被修改,并存放在常量区。一般有两个作用,规定作用域和存储方式(静态存储)。对于局部变量,static规定其为静态存储方式每次调用的初始值为上一次调用后的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是如此。static修饰的变量如果没有初始化,则默认为0.

量变产生质变 1万+

AUTOSAR从入门到精通-汽车电子电气架构(EEA)

EEA(Electrical/Electronic Architecture),电子电气架构,是首先由德尔福公司提出的,集合汽车的电子电气系统原理设计、中央电器盒的设计、连接器的设计、电子电气分配系统等设计为一体的整车电子电气解决方案的概念。通过EEA的设计,可将动力总成、驱动信息、娱乐信息等车身信息转化为实际的电源分配的物理布局、信号网络、数据网络、诊断、容错、能量管理等的电子电气解决方案。

getusushu的博客 857

【精通C语言】ANSI C 类型限定符const,volatile,restrict,_Atomic

本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 文章目录ANSI C 类型限定符1️⃣const 类型限定符  在指针和形参声明中使用const2️⃣volatile 类型限定符3️⃣restrict 类型限定符4️⃣_Atomic 类型限定符➰旧关键词新用法 ANSI C 类型限定符        我们通常使用类型和存储.

从善若水的博客 1059

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

【C语言】关于 static和const的用法

解释C语言中static和const的用法

宁清的博客 1497

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

从0开始C++(四):作用域限定符、this指针、static与const关键字详解

2、引用嵌套命名空间中的变量或函数:如果在命名空间的内部定义了与外部命名空间同名的变量或函数,可以使用作用域解析运算符来引用外部命名空间中的变量或函数。const可以应用于变量、函数参数、函数返回值等。3、引用类的静态成员:如果在类的内部定义了静态成员变量或静态成员函数,可以使用类名加上作用域解析运算符来引用类的静态成员。使用this指针可以明确指示当前对象的地址,可以解决对象之间的命名冲突问题,同时也方便了对对象的成员变量和成员函数的操作。它可以在类的成员函数中使用,用于引用调用该成员函数的对象的地址。

当实力撑不起野心的时候 学习才是唯一出路 1952

【C++私房菜】语法中的static和const

(1)静态成员函数中不能调用非静态成员。(2)非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。(3)静态成员变量使用前必须先初始化(如。

无敌岩雀的博客 1045

C++ const详解(附带static)

const的基本概念 const叫常量限定符,用来限定特定变量,以告知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。 const修饰基本数据类型 1.const修饰一般常量及数组 const int a = 10; int const a = 10; const int arr[3] = {1,2...

weixin_44572041的博客 460

C++ const限定符

C++ const限定符简介

上善若水 1470

Day3 (作用域限定符,this关键字,static关键字,const关键字)

5. 作用域限定符 ::5.1 名字空间掌握)名字空间是一种代码的层级划分。52。

weixin_64032452的博客 1000

常考关键字---const、static与volatile

特性const(常量)static(静态)volatile(易变)核心作用承诺值不会被修改控制生命周期和可见性防止编译器过度优化告诉谁主要告诉编译器和其他程序员告诉编译器和链接器主要告诉编译器主要目的保证数据只读,增强代码健壮性实现数据共享、状态保持、隐藏实现确保直接访问内存,处理程序外的数据变化生命周期不改变生命周期延长局部变量生命周期至整个程序不改变生命周期典型场景定义常量、保护函数参数、const成员函数类的对象计数器、文件内的私有全局变量访问硬件寄存器、中断服务例程线程安全。

会分享一些自己学习过程中的笔记,欢迎一起交流讨论 1020

C++限定符说明符

介绍了C++中常用的限定符和说明符,涵盖 register,static,extern,mutable,const,volatile,noexcept等。

weixin_41733034的博客 809

C++:static 和 const(各种场景的用法)

static 和 const各场景说明staticconstconst限定符和static的区别 static 全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量. 内存中的位置:静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化); 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态变量 在局部变量之前加上关键字static,局部变量就成

MARSHCW的博客 2048

C++类的const、static和const static数据成员的初始化

C++类的const、static和conststatic数据成员的初始化 参考:http://blog.youkuaiyun.com/yjkwf/article/details/6067267 http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html //const数据成员必须在构造函数初始化列表中初始化 //static数据成员必须在全

gukesdo的专栏 9060

每日一个C++知识点|const和static的区别

C++中const和static关键字作用不同但可组合使用。const确保变量不可修改,用于保护普通变量、函数参数和类成员;static改变存储位置和生命周期,用于局部变量、类成员和全局变量/函数。二者结合可实现"只读+共享"的静态常量,是定义系统配置常量的最优解。理解这两个关键字的区别与组合对编写安全高效的C++代码至关重要。

weixin_46441425的博客 1017

5 C++ const 常量限定符和处理类型

constconst。

zhaobenjian的博客 1055

dynamic_cast和static_cast和const_cast

但如果转换失败,会抛出。,那么转换会失败,返回。

zjkyeah的博客 1259
上一篇: 全局变量和局部变量的执行时机
下一篇: 构造函数和拷贝构造函数和移动构造函数的区别和使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值