const和static

const和static的作用以及区别 Static: 存储方式: 定义一个static变量时,编译器会在静态存储区为它分配空间,而不是在栈上。 1. static变量如果声明在函数体中,它的作用范围是整个函数体。 需要注意它只会分配一次内存。所以多次调用这个函数不会多次给static变量重新赋值。因此它的值会保持上次调用时的值。 2. static变量如果声明在模块中,它的作用范围是这个模块中的所有函数。它可以被这个模 阅读详情

const

概念

const允许我们指定一个语义约束,编译器会强制执行这个约束,告诉编译器和其他程序员某值不应该被改变,当某个值确定不可被改变时,我们就应该使用const

使用场景

  • 修饰变量:限定变量不可修改
  • 修饰指针:指针常量和常量指针
  • 修饰函数
    • const int& fun(int& a); //修饰返回值
    • int& fun(const int& a); //修饰形参
    • int& fun(int& a) const{} //const成员函数
  • 类
    • 修饰成员变量:类的数据成员不能在任何函数中被赋值或修改,但必须在类的构造函数中使用初始化列表的方式进行初始化。类可以创建多个对象,不同的对象其const成员变量的值是不同的。
    • 修饰成员函数:
      • 防止成员函数修改成员变量的值,即该成员函数并不能修改成员变量。而非const对象可以访问任意的成员函数,包括const成员函数;
      • const成员函数不可以修改对象的数据,不管对象是否具有const性质。
    • 修饰类对象:const修饰的类对象,该对象内的任何成员变量都不能被修改,只能调用const成员函数。

举例

operator*声明式:

class Rational {...};const Rational operator*(const Rational& lhs, const Rational& rhs);

Rational a, b, c;
(a * b) = c;
if (a * b = c) ...

本意可能是判断 a*b 和 c 是否相等,如果不加const,写成=的情况下,会导致错误。

拓展

拓展1:const修饰的成员函数可以修改mutable修饰的成员变量

拓展2:const和non-const成员函数的有着实质等价的实现时,可以在non-const函数中调用const版本的函数

class TextBlock{
public:
    ...
    const char& operator[](std::size_t position) const
    {
         ...
         return text[position];
    }
    char& operator[](std::size_t position)
    {
         return const_cast<char&>(static_cast<const TextBlock&>(*this)[position]);
    }
    ...
};
  • 第一次类型转换为*this添加const,先将*this从原始类型 TextBlock& 转换为 const TextBlock& 类型
  • 第二次从返回值中移除const属性

拓展3:static和const可以同时修饰成员函数吗?

不可以。C++编译器在实现const的成员函数的时候会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时用它们。

static

  • 静态成员变量:类的所有对象间共享的成员变量,不属于某个类对象,而属于类本身,静态成员变量在所有类之间只有一个实例。static成员必须在类外进行初始化,而不能在构造函数内进行初始化。不过也可以用const修饰static数据成员在类内初始化 。
  • 静态成员函数:用static修饰成员函数,使这个类只存在这一份函数,所有对象共享该函数,不含this指针。静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问。不可以同时用const和static修饰成员函数。
  • 静态局部变量:静态局部变量在程序运行期间只初始化一次,一般用于单例模式
    • 内存中的位置:data段
    • 作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
  • 静态全局变量:
    • 内存中的位置:静态存储区
    • 初始化:未经初始化的全局静态变量会被程序自动初始化为0
    • 作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。(只能在本文件中存在和使用)

全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的(在其他源文件中使用时加上extern关键字重新声明即可)。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

  • 普通函数:修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。

极空间NAS小白也能搞定的Gitea部署:Docker+MySQL避坑全记录 本文为极空间NAS用户提供了一份详尽的Gitea私有代码仓库部署指南。针对极空间ARM架构和图形化Docker管理的特殊性,文章重点讲解了如何通过Docker和MySQL容器进行部署,并提供了三种获取兼容镜像的实战策略,特别是利用第三方镜像站转录的方法,帮助小白用户成功搭建并初始化Gitea服务,实现私有Git托管。 阅读详情

相关推荐

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

本文详细介绍了在RK3588 Android12系统上实战RTL8723DU WiFi蓝牙双模驱动移植的全过程。从驱动源码获取与修改、系统级集成与编译,到调试与性能优化,提供了完整的解决方案。特别针对USB接口适配、电源管理和蓝牙共存等关键问题给出了具体代码示例,帮助开发者快速完成驱动适配并提升设备稳定性。

weixin_28703489的博客 324

C++中的 const和static 以及 static const 和const static

对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. const定义的常量在函数执行之后其空间会被释放,而static...

mhjie1998的博客 3215

零基础手把手教你做FMEDA

本文通过分步骤手把手来教大家具体如何做FMEDA,希望对工作中要做FMEDA的童鞋有帮助。对于工作当中用不到FMEDA的童鞋,也可以作为科普知识,更好地了解一下FMEDA及硬件功能安全。

NewCarRen的博客 9926

Static和const理解

类中Static与const修饰的作用

weixin_44493244的博客 1911

85-dify案例分享-无需OpenAI账号,Dify+Sora2工作流实战:一键生成写实动漫视频,插件+教程全解析

本文详细解析了如何利用Dify平台结合Sora2插件,搭建无需OpenAI账号的AI视频生成工作流。通过可视化拖拽配置,用户输入文本描述即可一键生成高质量的写实或动漫风格短片,极大降低了AI视频创作的技术门槛。教程涵盖插件安装、API密钥获取、工作流搭建及优化技巧,助力创作者快速实现创意。

weixin_29053577的博客 554

Revit Dynamo实战:用Excel数据批量生成桥梁模型(附自适应族技巧)

本文详细介绍了如何利用Revit Dynamo结合Excel数据实现桥梁参数化建模,重点讲解了数据驱动建模、自适应族优化及大型项目性能管理三大核心技巧。通过结构化Excel数据、高级自适应族创建和分块处理策略,显著提升桥梁建模效率与设计变更响应能力。

weixin_42520025的博客 385

static、const和static const

本文转载自http://hi.baidu.com/sytarchen/item/c7cc767968b5ee3471442342  const定义的常量在函数执行之后其空间会被释放,而static定义的静态常量在函数执行后不会被释放其空间。 static 表示的是静态的。类的静态成员函数,成员变量是和类相关的,不是和类的具体对象相关,即使没有具体的对象,也能调用类的

l494926429的博客 2873

Isaac Lab & GR00T N1 入门教程(七)人形机器人推理与技能学习策略基准测试

本文介绍了IsaacLab设计的工业机器人操作评估系统,包含两项任务:螺母倾倒(成功率91%)和排气管分拣(成功率95%)。系统支持通过IsaacGR00TN1模型进行策略闭环评估,提供完整的开发环境配置指南(需Ubuntu22.04、CUDA12.8等环境),数据集下载方式(HuggingFace平台托管),以及模型微调流程。评估支持并行化测试(建议10-30个并行环境),并给出详细硬件配置建议(推荐RTX A6000 Ada显卡)。文档还包含常见问题解决方案,特别说明当前暂不支持Blackwell GP

2506_90492529的博客 1118

C++ #define、const和static

#define和const的区别 两者区别 (1)作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在编译、运行阶段起作用。 (2)作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 (3)存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中...

a834595603的博客 666

YOLOv11改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv11原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 8792

Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.

Openclaw 错误分析 与 解决方案 :Selected model is at capacity. Try a different model, or wait and retry.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 6412

static 和const分别怎么用

6.static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗? static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。 1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用...

zzyzgg的博客 4814

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2835

C++学习 之 static、const和static const

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在C++中,static静态成员变量不能在类的内部初始化。...

木子儿 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

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

C++中static和const的区别和用法

const用于声明常量,表示该变量的值不能被修改。static用于声明静态变量或函数,具有延长生命周期或限制可见性的作用。

佳乐的博客 1132

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c++之static和const

static 作⽤:控制变量的存储⽅式和可⻅性,且。

youzjuer的博客 521

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C/C++——const和static、static const 和 const static区别

const和static区别 const定义的常量在超出其作用域之后其空间会被释放。在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。 const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的...

lovejay7的博客 4063

Const和Static详解

const 分为三种介绍 普通const对象(变量) 一旦创建就不能再改变,所以const的对象必须要初始化,必须赋值,不然没有意义(难道不可更改一个没有的东西) 这里插播一个define,虽然# define a 30;也是让a不可更改,但是他是替代,出现几次替代几次。产生多个副本,const只有一个副本,define不能定义数据类型 对于类里面的const我们分为四种 const成员变...

王文平_Trista的博客 788

C#的const和static的问题

是编译时常量本质:属于 “类型级别” 的常量,值在编译阶段就已确定并嵌入程序集,运行时无法修改;必须在声明时直接赋值,且只能是基础值类型(int/float/string 等),不能是引用类型(除 string 外);不支持使用unity的API =>因为: Unity API 具有 “运行时依赖” 特性// 正确:编译期确定的固定值// 错误:Vector3是引用类型,且依赖Unity运行时API,编译期无法确定值// 错误示例:方法的默认值必须是编译时常量,

m0_61132275的博客 929

c++的const和static区别

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。      static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。      在C++中,static静态成员变...

qq_31484941的博客 799

static 和 const

不可以同时用const和static修饰成员函数。 C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时const的用法和static是冲突的。 我们也可以这样理解:两者的语意是矛盾的。static的作用是表示该函数只作用在类型的静态变量上,与类的实例没有关系;而const的作用是确保函数不能修改类的实例的状态,与类型的静态变量没有关系。因此不能同时

EvenHong的博客 1317

const和static的区别

const和static的区别 const const修饰的变量不能被更改,但是const修饰又有三种特殊的修饰方法。 const修饰指针——常量指针 const修饰常量——指针常量 const既修饰指针,又修饰常量 const修饰指针 const int *p = &a;(p为常量指针) 在被const修饰后,p为常量指针。 常量指证:指针的指向(即指向的地址)可以修改,但是指向的 数值不能修改。 const修饰常量 int *const p = &a;(p为指针常量) 指针常

weixin_62675330的博客 1704

const 和static的用法

一、static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。 1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。 4)知识点:当st...

CX的blogs 424

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

const和static const的区别

对于C/C++语言来讲, const就是只读的意思,只在声明中使用; static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放; 对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. static const 应该就是上面两者的合集. 下面分...

小y的博客 499

const,static和readonly

定义: const:它指定字段或局部变量的值是常数,不能被修改。 readonly: 当字段声明包括readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。 static:声明属于类型本身而不是属于特定对象的静态成员。   使用: const用于定义常量,一般用strut进行存储,并在其他地方直接访问。 readonly用于定义只读的变

在坑中上爬,在打击中成长 1439
上一篇: 动态多态和虚函数
下一篇: Effective C++ 第2章笔记
Fnedx
博客等级 码龄2年 17粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值