c++高级---C++类中的常量以及cosnt指针的理解

RK3576 USB3.0 DWC3控制器调试:PHY初始化失败排查指南 DWC3 是 Synopsys 公司推出的 USB3.0/3.1 控制器 IP,支持双角色(DRD)模式,可配置为 Host、Device 或 OTG。 阅读详情

部分转自:http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125020.html

由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。
  不能在类声明中初始化 const 数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道 SIZE 的值是什么。
class A 
{
  
const int SIZE = 100;   // 错误,企图在类声明中初始化 const 数据成员 
  int array[SIZE];  // 错误,未知的 SIZE 
}
; 
 
const 数据成员的初始化只能在类构造函数的初始化表中进行(区分,变量可以在构造函数的函数体中初始化
),例如

class A
{
  A(int size);  // 构造函数
  const int SIZE ;   
};
【补充,也可以在cpp文件中初始化,向成员函数的实现一样】
A::A(int size) : SIZE(size)  // 构造函数的
{
}
A  a(100); // 对象 a 的 SIZE 值为 100
A  b(200); // 对象 b 的 SIZE 值为 200
 
 

 怎样才能建立在整个类中都恒定的常量呢?以下介绍两种方法:

1.用类中的枚举常量来实现。例如

class A
{
  enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量
  int array1[SIZE1]; 
  int array2[SIZE2];
};

枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如 PI=3.14159)。

 

2.使用关键字static:

class A

{

 static const int SIZE=100;

 int array[SIZE];

 

}

这将创建一个名为SIZE的常量,该常量将与其他静态变量存储在一起,而不是存储在某个对象中。因此,此常量将被整个类的所有对象共享。

注意:只能利用这种技术声明值为整数或者枚举的静态常量,而不能存储double类型的常量。

 

【补充,对于char* p="ABCD";表示编译时在常量存储区存入ABCD并在数据区定义一个指针变量p指向那个常量存储区,任何企图使用p对常量存储区的内容的修改都会报错,虽然p不是const的但它的行为在这里却类似是const的。

还有对于string s="ABCD"或string s("ABCD");我认为编译时在常量存储区先放入ABCD,然后在数据区定义一个类变量s,再然后把常量存储区内的内容ABCD复制到变量s内存内。可以简单认为上面语句是调用string类的拷贝构造函数,而这个拷贝构造函数的形参是const char[]数组类型,系统会先定在常量存储区定义好ABCD,然后紧接着复制ABCD到s中,有个ABCD字符串隐式转换到char[]的过程。注意const修饰的指针可以指向非const对象,而非const指针不可以指向const的对象。不要理解为const修饰的指针表示该指针执行const对象,而应理解为const修饰的指针执行一个对象,并且不能用这个指针去修改这个对象,只能用这个指针去读取这个对象。】

 

YOLOv9改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制 这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。 阅读详情

相关推荐

Ubuntu安装opencv4.5(自己安装过程详细)

1.下载opencv 在opencv官网下载source版,下载链接 http://opencv.org/releases.html。别下载错版本 下载过程就不多说了。 2.安装过程 2.1解压 unzip opencv-4.5.0.zip cd opencv-4.5.0 2.2安装依赖的库 sudo apt-get install cmake sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-

weixin_45629790的博客 1万+

C++中的常量介绍

1.Cpp中的常量 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 2.整型常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。 整数常量也可以带一...

CurryCoder的个人博客 1642

Electron多窗口开发避坑指南:Pinia状态同步的3种解决方案对比

本文深入探讨了在Electron多窗口应用中实现Pinia状态同步的三种核心方案。针对Electron多窗口架构下状态隔离的挑战,文章对比了基础事件通信、共享存储以及智能Pinia插件等方案的优劣与适用场景,并提供了生产级的实现指南与选型建议,帮助开发者构建健壮高效的桌面应用。

spice的博客 479

高质量C++/C编程指南---常量

常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。 1 为什么需要常量 如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示

jia_xiaoxin的专栏 1105

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

通讯软件013——分分钟学会Kepware OPC AE Server仿真配置

本文介绍如何使用Kepware软件仿真OPC AE Server配置。

zhouwl72的博客 2226

C++中的常量

C++中的常量 在C语言的学习中,我们已经介绍了变量和常量的内容,但是在C++中关于常量却有了新的特性,因此下面九江讲解C++中的常量 所谓常量是指不能修改值的量 在C++中,常量可以是以下形式 字面常量 关键字const声明的常量 关键字constexpr声明的常量表达式(C++11新增的特性) 关键字enum中声明的枚举常量 使用#define定义的常量(不推荐使用) 字面常量 字面常量是指我们源代码中所出现的任何的常量,它可以是任何类型,例如 #include <iostream>

鸿神的博客 1743

NR PUCCH(一) PUCCH format 0/1

NR中PUCCH物理信道用来发送上行控制信息Uplink Control Information(UCI),当然UCI也可以在PUSCH上发送。UCI 内容包括:CSI,HARQ ACK/NACK ,SR 及上述三者的组合信息。 那先看下PUCCH format ,序列的生成及资源映射的相关内容。 NR中支持5种格式PUCCH,根据PUCCH format占用时域符号长度分为短PUCCH(1-2个符号,PUCCH 0/2)和长PUCCH(4-14个符号,PUCCH1/3/4)。使用短PUCCH 能够支

asd199086的博客 6060

C++ 常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。 整数常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。 整数常量也可以带一个后缀,后缀是 U ...

老狼的专栏 618

RK3568平台(USB篇)USB基础知识

现象:把USB设备比如Android手机接到PC答1:是USB控制器,是USB控制器内嵌的root hub.答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序"。USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序。答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;

weixin_49303682的博客 1658

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

C++cosnt

文章主要介绍了C++中const关键字的使用

m0_63650113的博客 531

化工设计软件:AutoCAD Plant 3D二次开发_(1).AutoCADPlant3D概述

AutoCAD Plant 3D 是一款专为化工行业设计的三维工厂设计和建模软件。它基于AutoCAD平台,提供了强大的三维建模功能和专业的化工设计工具,帮助工程师和设计师在工厂设计过程中提高效率和准确性。AutoCAD Plant 3D不仅能够创建详细的三维模型,还可以进行管道设计、设备布置、支架设计等复杂任务。通过上述案例,我们可以看出 AutoCAD Plant 3D 在化工厂设计中的强大功能和优势。该软件不仅提供了丰富的建模工具和专业的设计功能,还支持二次开发,使用户能够根据具体需求进行定制化操作。

kkchenjj的博客 1100

C++ | 初识const关键字、常量与常变量

C++笔记:常指针之——指针常量与常量指针 const int *p; int const *p; // const 与 int 不分先后,意义相同。 此类指针我们称之为常量指针。顾名思义,指针指向的值是一个常量(语法上的,编译器认为该值不可通过指针修改)。记忆方法:const修饰的 (P),p解引用就是指针所指向之值,所以常量指针修饰的值为常量(不可做左值被修改)。 示例代码:{ int a = 10; const int p = &a; int q = p; // 此语句错误的,

专注于C/C++/Linux领域创作 2123

STM32F407中文手册

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++中cosnt与指针的使用

我们经常使用const来修饰数据类型,来保证数据的安全,甚至cosnt被用在函数参数处,保证数据的安全性,当指针跟const放在一起时,它又表示什么作用呢?我们不妨写个代码看一看,首先我们给出一个简单的指针赋值的操作。 #include <iostream> using namespace std; int main() { int test = 6666; ...

SUST_DOG_MASTER博客 636

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

cosnt——C++

概念 const单词字面意思为常数,不变的。它是c/c++中的一个关键字,是一个限定符,它用来限定一个变量不允许改变,它将一个对象转换成一个常量。 const int a = 10; A = 100; //编译错误,const是一个常量,不可修改 常量的引进是在c++早期版本中,当时标准C规范正在制定。那时,尽管C委员会决定在C中引入const,但是,他们c中的const理解为”一个不能改变的普通变量”,也就是认为const应该是一个只读变量,既然是变量那么就会给const分配内存,并且在c中const是

qq_51969153的博客 413

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

cosnt 在C C++中的区别

转载自:http://blog.youkuaiyun.com/miyunhong/article/details/5903857 一、C中CONST的使用 const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。  虽然这听起来很简单,但实际上,

sduzh的专栏 839

C++const修饰指针学习

C++const修饰指针 1、常量指针 const int *p = &a; 指针指向的值不能改,指向可以改 //*p = 20;错误 p = &b;//正确 2、指针常量 int * const p1 = &a; 指针的指向不可以改,指针指向的值可以改 *p1 = 100;//正确 //p1 = &b;错误 3、const既修饰指针 ,又修饰常量 const int * const p2 = &a; 指针的指向和指向内存的数值都不能改

ISP行业的忠实粉丝 242

cosnt修饰指针辨析

const在 * 之前,cons修饰的是指针指向的对象;const在 * 之后,cons修饰的是指针本身。

KYG__U_O的博客 900

cosnt修饰符

看到const关键字,程序员首先想到的可能是const 常量。 const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need...

aigui1439的博客 163

const指针和指向const对象的指针

目录 1.常量表达式 2.指针和引用的比较 3.指针和const限定符 4.数组 1.常量表达式 const int n = 100; int* a[n+1] = {0}; 上面的n+1是常量表达式,编译时即可计算出结果。 2.指针和引用的比较 ①引用总是指向某个对象,定义引用时必须初始化,从一而终。 ②给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另外一个对象关...

qq_33457548的博客 1387

【C/C++】秋/春招技术岗面试基础——cosnt和define

C和C++中const的区别 C中的const C语言中的const只是让变量变为只读属性,其本质还是变量,不是真正意义上的常量(只有enum枚举定义的才是常量). 注意:const变量不能被直接赋值,但是可以通过指针来修改const变量. 由于const局部变量会存在栈里,而const全局变量会存在只读存储内存上 所以我们可以通过指针来修改const局部变量,但是修改const全局变量,会使程序...

qq_40641491的博客 207

C/C++关键字:const

const关键字的四大作用:修饰①变量、数组 ②指针 ③函数的形参、引用 ④类的成员函数和对象。重点是const修饰函数的形参、尤其是修饰引用(工作项目中最常用)

Edward2022的博客 1023

C++:const关键字(一)

C++程序员正在吃透的小知识

JY_LOVE的博客 506

const 和一级指针、二级指针、引用的结合使用总结

#include #include using namespace std; int main(int argc, char* argv[]) { //const int a = 10; // C++中是真正的常量,C++是强类型语言 但是在C语言中是常变量,可以通过地址修改常变量的值 //int b = a;//值传递,正确!a和b没有联系,各自独立的地址,只是值一样 //int

风清扬 885
上一篇: 总结--STL
下一篇: B树、B-树、B+树、B*树
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值