C++编译期间类中的常量

C++干货系列——从编译期常量谈到constexpr(一) 从编译期常量谈起 C++20都支持虚函数的constexpr了,我打算用三篇读文章讲清楚编译期常量和constexpr这个东西和编译期常量的关系,即为什么需要他来辅助解决这个问题。最后帮助读者在实际编码过程中能够有意识地去运用他们,这才是终极目标。这篇文章中会讲到隐藏在日常编程中的各种编译期常量,以及他们存在的意义。 什么是编译期常量 想要用编译期常量就要首先知道它们是什么,一般出现在哪里和运行期常量有什么区别,因此我打算用第一篇文章重点分析编译期常量以及使用他们有什么好处。 编译期常量(Compile-t 阅读详情

  问题:在类中建立一个int类型的数组   方法一:(错误)   class Test   {   const int size = 100;   int array[size];   //……   };   错误原因:   1:因为在一个类中,const恢复了它在c中的一部分意思,在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能被改变。所以在类中使用了const的意思是:在这个对象的生命周期内,它是一个常量。   然而,每个对象可能包含不同的值。   2:对const常量进行了初始化,C++中这个初始化必须由构造函数完成,如const常量在初始化列表中进行初始化。   方法二:(正确,有缺陷)   使用enum;   class Test   {   enum { size = 100};   int array[size];   //……   };   使用enum不会占用对象中的存储空间的,枚举常量在编译的时候被全部求值。   缺点:   假如定义一个非整型的常量该如何?enum无法完成此项操作,同时丧失了枚举本来的作用。   方法三:(正确,最好)   使用静态常量;   class Test   {   static const int size;   int array[size];   //……   };   const int Test::size = 100;   它既是常量,不能改变,又是静态,在类中只有一个定义点。所以能够完成任务。   同时,它可以定义任何与定义类型的常量。

 

C++ 标准允许在类的定义中定义静态整数常量,但其他类型的类常量则需要在源文件中单独的定义或将常量封装在函数中 .

咱们一起学C++ 第一百二十三篇:之const在类中的应用(三) 在C++的学习之路上,我们一同前行,每一次分享都希望助力大家更好地理解这门语言。此次,我们将深入探讨const在类中的应用,特别是关于编译期间类里的常量以及旧代码中处理类似需求的“enum hack”方法。理解这些内容对于编写高效、兼容且规范的C++类至关重要。希望通过本次讲解,大家能清晰掌握如何在类中正确使用const来创建编译期间常量,以及了解历史遗留的编程技巧,一起在C++的知识海洋中继续成长,共同进步。 阅读详情

相关推荐

[C++常数 cpp]--C++中的常量及其使用方法

在C++编程中,常量是一种不能被改变的固定值。通过使用常量,可以使程序更加安全可靠,减少错误发生的概率。本文将对C++中的常量进行详细的介绍。本文对C++中的常量进行了详细的介绍,通过使用常量可以提高程序的可靠性和安全性,减少程序出错的概率。在实际编程中,应该根据不同的场景选择不同的常量定义方式,并注意常量的命名规范。枚举类型是C++中的一种数据类型,它用于定义一个有限的集合。在C++中,枚举常量默认情况下是整型常量。这里定义了一个枚举类型Color,其中包含三个枚举常量RED、GREEN和BLUE。

2301_79331421的博客 386

C++中传值方式传参与引用常量传参的使用规则

揭开 C++ 编译器的面纱,你将会发现引用通常情况下是以指针的形式实现的,所以通过引用传递通常意味着实际上是在传递一个指针。因此,如果传递一个内建数据类型的对象(比如 int ),传值会比传递引用更为高效。那么,对于内建数据类型,当你在传值和传递常量引用之间徘徊时,传值方式不失为一个更好的选择。迭代器 和 STL 中的函数对象都是如此,这是因为它们设计的初衷就是更适于传值,这是 C++ 的惯例。实现迭代器和函数对象的人员有责任考虑复制时的效率问题和截断问题。(这就是一个“使用哪种规则,取决于当前使用哪一部份

海乐学习 1022

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 183

C++11:常量表达式

常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。 使用constexpr,你可以创建一个编译时的函数: constexpr int getConst() { return 3; } void test07() { int arr[getConst()] = { 0 }...

weixin_43718250的博客 957

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1000

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3090

C++编程思想 第1卷 第8章 常量 类 编译期间类的常量

如何让一个类有编译期间的常量成员?要求使用另外一个关键字static static意味着 "不管类的对象被创建多少次,都只有一个实例" 必须在static const定义的地方初始化。 在一个类里创建和使用一个叫做size的static const,这个类表示一个存放 字符串指针的栈   //: C08:StringStack.cpp // From Thinking in C++, 2...

eyetired的博客 260

【CANoe示例分析】SOMEIPWithvCDL_16

本示例来源于官方提供的示例工程:0004_基于vCDL实现SOMEIP通信_Demo\0004_基于vCDL实现SOMEIP通信_Demo\SOMEIPWithvCDL。

jasonj333 567

c++11 编译期常量定义

在c++11之前,在类中定义编译期常量的方法: template<typename Type> struct Size { static const int x = 1; }; template<typename Type> struct Size { enum{ x = 1, y = 2 }; }; 在c++11中定义编译期常量,无须定义static...

ffmemcpy的博客 1220

【第48例】BLM模型之市场洞察-五看工具篇(一)

BLM市场洞察

产品线负责人 2109

综述性论文别再堆砌文献!用GPT-5.1 Thinking轻松攻克四大关键难点,真正实现高效高质撰写(附AI提示词)

逻辑构建上以往都是先梳理一篇文献的领域研究脉络,明确其发展阶段、核心议题等,再搭建初步的大纲,借助思维导图或者别的方式将筛选后的文献观点按主题归类到对应章节,理清楚每个章节间的递进或并列关系,最后再逐个章节进行补充过渡表述,那么做的目的其实就是摆脱文献堆砌问题。人工做法往往是对比不同文献的研究方法、数据来源与核心结论,再清晰标注每类成果的优缺点,找到文献中存在的争议焦点,找到之后再梳理争议产生的核心原因,最后在基于现有研究,推出还未被探索的研究方向,从而提炼出创新切入点。2)文献之间的相同点与不同点;

智能AI让学术科研更容易 173

C++编程思想 第1卷 第8章 常量 类 编译期间类的常量 旧代码中的”enum hack”

旧版本的C++中,不支持类中使用static const。 意味着const对类的常量表达式不起作用 人们想到用不带实例的无标记enum,通常称为enum hack 一个枚举在编译期间必须有值,在类中局部出现,而且值对于常量表达式是 可以使用的   //: C08:EnumHack.cpp // From Thinking in C++, 2nd Edition // Available a...

eyetired的博客 250

低轨通信 | 手机直连低轨卫星通信:架构、关键技术与未来展望

手机直连低轨卫星通信正推动人类进入"全域连接"时代。当中国星网GW星座与千帆星座的万颗卫星点亮夜空,当普通智能手机在珠峰之巅仍能流畅视频通话,当远洋渔船通过卫星物联网实现精准捕捞——这些场景不仅重构通信产业格局,更将深刻改变人类生产生活方式。正如工信部《指导意见》所规划,到2030年我国将发展超千万卫星通信用户,催生万亿级新市场[1][5]。在这场太空基建竞赛中,技术创新与标准制定的双重突破,将决定未来数字文明的星空版图。

尘世冰封的专栏 937

C++中const的用法【03】----类

前面介绍了const 在常量与指针和const 在函数中的用法,虽然放在不同的位置会有不同的用法,但归根结底, const 的思想都没有变----那就是用来修饰一个不能被改变的量。 然而,const 在类中的含义有所不同。 下面我们来介绍const在类中的具体情况。 const 不仅被用来修饰类的成员,还可以在类外,是整个实例都作为const ,但类中难免有修改数据成员的函数,因此为了保持

Batman_0331的专栏 712

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【每日 C/C++ 问题】

在 C++ 中,常量表达式是指在编译期间就能计算出结果的表达式,常量表达式的结果在程序运行过程中是不可改变的。常量表达式可以是一个简单的字面值常量,如整数常量(

2301_80313293的博客 1226

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

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

C++中的const

const前言0x00 const修饰变量0.0 const与无参宏比较0.1 const常量必须赋初值0.2 const常量在编译期间值替换0.3 const全局变量0x01 const修饰指针1.0 常量指针与指针常量1.1 const指针的相互转换1.2 const指针初始化1.3 小试牛刀0x02 const修饰引用0x03 const在class中的作用3.0 const成员变量和成员对象3.1 const成员函数3.2 const对象 前言 const关键字其实在C中就有,C中的const可

SHLYYY 1571

STM32F407中文手册

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

C++高级使用技巧:const & constexpr

const主要有两个作用:只读限制(一般用来声明函数参数)和常量限制(用于不可变恒值声明),主要区别在于是否具有确定数值。 1.2 const 和 #define的区别 #define是预处理命令,它所定义的字符串在C++中称为宏定义;const是一个关键字(keyword),用于使标识符(identifier)的值为常量。 (1)编译时的处理方式不同: #define作用原理本质上就是预处理阶段在宏调用处进行字符替换处理,不做任何计算;

qq_36756667的博客 340

妖藏巨细(上)

  妖藏巨细(上)前言:我是一个马上就要离开学校的学生,这是我一两个月前写的第一篇文章,文章中的hustli是我的一位师弟,现在是南京大学小百合CPlusPlus版的版主,为人热情诚恳,mud是小百合的一位网友,感谢他们让我知道不仅是阅读,其实写作也是很快乐的。这篇文章,主要是为回答hustli提出的前三个问题和最后一个问题以及mud提出的第四个问题。我会陆续将近两个月的文章全发到优快云

仰望星空 1448

关于多态中虚函数的细节整理

多态的机制主要是依靠虚函数的作用。关于多态, 用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”。

xiaoyiyaonuli的博客 319

C++编程思想学习——常量

1、常量的基本概念        常量是用来表示在程序运行中不会改变的量。常量的作用域和普通变量的作用域是相同的。 常量可以用做值替换。 常量也可以用来存储在程序运行期间产生的值,但是,该值在整个生命周期内是不会改变的,这样如果有在运行期间试图改变它则会给出错误信息,从而提高了程序的安全性。 同时,常量也可以用于集合,用于描述一个不会改变的存储块。但是,编译器不会将整个集合保存到符号表中

Nancy_m的专栏 979

C++中的常量-编译期常量与运行期常量

确定时间编译期常量:在编译时确定值。运行期常量:在运行时确定值。编译器优化编译期常量:编译器可以进行常量折叠和代码优化。运行期常量:值在运行时确定,编译器无法进行类似的优化。用途编译期常量用于那些可以在编译阶段完全确定且不会改变的值。运行期常量用于那些需要根据程序的运行时情况动态确定但一旦确定便保持不变的值。编译期常量对程序的性能有好处,因为它们的值在编译时就已经固定,可以使生成的代码更加高效。而运行期常量增加了灵活性,但代价是运行时的计算负担稍大。

qq_45993770的博客 1503

什么是 C++ 中的常量表达式? 有什么用途?如何判断一个表达式是否是常量表达式?

由常量和算术运算符(`+`、`-`、`*`、`/`、`%`等)、逻辑运算符(`&&`、`||`、`!`等)、位运算符(`&`、`|`、`^`、`~`、`<<`、`>>`等)组成的表达式,只要其中参与运算的操作数都是常量表达式,那么整个表达式也是常量表达式。模板参数:模板参数必须是常量表达式,这使得模板在编译时就能根据常量表达式的值进行实例化,生成针对特定参数的具体代码,提高了代码的复用性和执行效率。:被声明为`constexpr`的函数,若其参数均为常量表达式,则该函数的返回值也是常量表达式。

SUN_Gyq的博客 1156

C++:常量

使用const的好处是允许指定一种语义上的约束,即某种对象不能被修改,且由编译器具体实施这种约束。修饰普通变量,时期不能被随意修改【注意】1.C++中的const为内部连接,即由const定义的常量仅在被定义的文件中才能看见,除非使用extern。一般情况下,编译器不为const分配空间(而extern则强制分配空间)。2. 当定义一个常量(const)时,必须进行初始化,即赋初值给它,除非已经用extern最清楚说明。可以使用const修饰数组,表示“常”数组,即数组的值不能被修改。例如。

weixin_45652283的博客 1192
上一篇: “组合”优于“继承”
下一篇: 关于初始化C++类成员
batoom
博客等级 码龄20年 32粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值