C++基本概念总结——const 和 非const

C++中的const对象与const成员函数     在前边几章的内容中,我们知道C++的类中可以有const成员变量,并且还知道类中的const成员变量只能在初始化列表中初始化。同样,在C++中,还存在const对象以及const成员函数,const修饰的对象为只读对象,他们的特性如下:     const成员函数的定义:需要在函数的声明及定义的后边加上const关键字    -const对象只能调用const成员函数     -const... 阅读详情

const成员函数

类的成员函数后边增加一个 const 关键字,表示该函数为 const 成员函数。考虑如下类A的定义,f1为 const 成员函数,f2为 非const 成员函数:

class A{
public:
	A(int i) : m_id(i) {}
	void f1() const; // const 成员函数
	void f2();       // 非const 成员函数 
private:
	int m_id;
};

在 const 成员函数中不能修改类的成员变量,如下代码会导致编译失败:

void A::f1() const
{
	m_id = 1; // 编译失败!不能修改类的成员变量
}

此外,类的 const 对象,只能访问其 const 成员函数,如下代码中只有对 f2 的调用会导致编译失败:

	const A a(1);
	a.f1(); // 编译成功
	a.f2(); // 编译失败,不能访问非 const 成员函数

 

const成员变量

非静态 const 成员变量需要通过初始化列表进行初始化。静态 const 成员变量通过显示的定义进行初始化。

class A{
public:
	A(int i) : m_id(i){}  // 非静态 const 成员变量通过初始化列表初始化

private:
	const int m_id;
	static const int s_id;
};

const int A::s_id = 1; // 静态 const 变量通过显示的定义进行初始化


const指针

const指针定义时,根据 const 关键字和 * 的位置,可以分成两种情况。

	char buf[4] = "abc";
	const char* p1 = buf;
	char const* p2 = buf;
	char* const p3 = buf;

例如上面的代码中,p1和p2表示的含义相同(const 关键字在 * 的左边),表示指针指向的内容是 const 的,但指针本身是 非const。p3 (const 关键字在 * 的右边)表示指针本身是const的,但其指向的内容是 非const。

	char c = 'd';
	
	p1[0] = c; // 编译失败,其指向的内容是const的,不能修改
	p2[0] = c; // 编译失败
	p1 = &c;  // 编译成功
	p2 = &c;  // 编译成功

	p3[0] = c; // 编译成功
	p3 = &c;  // 编译失败,指针本身是const的,不能修改
C++ const变量和非const变量 在头文件中应用的解析 案例: variables.h文件   #include //#include using namespace std; void input();//函数申明 const int var=100;//定义一个const变量, extern int Max;//申 阅读详情

相关推荐

const静态 VS 非const静态

归属是核心:非静态→对象,静态→类;访问是关键:非静态必须用对象,静态优先用类名;函数避坑:静态函数无 this,只能访问静态成员;选择依据:是否需要 “所有对象共享”—— 是则静态,否则非静态。

笔记本 824

C++中,经常有同名成员函数,一个const形式一个非const形式的解读

C++中,我们经常看到STL有同名成员函数,一个const形式一个非const形式的,而且实现都是完全相同的,为什么呢?我们简单来分析一下,看看下面的代码,来源于C++中STL string class的片段: reference at(size_type _Off) { // subscript mutable sequence with checking if (this->_Mysi...

晓阳 的专栏 4159

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9180

c++函数形参const引用和非const引用的教程

目录函数形参 const 引用居多的原因普通的函数形参引用,不带const的例子函数形参是const引用的例子下面例子是是函数形参是对象类型,const 引用依然可以接受const 和 非const对象 函数形参 const 引用居多的原因 大部分c++函数形参如果是引用,都是const类型的引用,为什么呢? 答案就是const类型的引用可以,接受const类型的参数,和非const类型的参数. 下面代码距离说明 普通的函数形参引用,不带const的例子 下面代码函数传入const类型的参数直接报错了. i

小手琴师的博客 3353

Vue项目实战:用DataV的dv-scroll-board打造高颜值滚动表格(附完整代码)

本文详细介绍了如何在Vue项目中使用DataV的dv-scroll-board组件打造高颜值滚动表格。从基础集成到高级配置,包括动态数据处理、深度样式定制、性能优化策略以及交互增强方案,帮助开发者快速实现企业级数据展示需求。特别针对样式优化和滚动表格的常见问题提供了实用解决方案。

weixin_30892037的博客 496

将pytorch的权值矩阵量化为定点数补码并导入FPGA中

Xilinx FPGA实现LSTM算法时对ROM的初始化 将pytorch框架的权重矩阵以定点数补码的形式导入到FPGA中 文章目录Xilinx FPGA实现LSTM算法时对ROM的初始化1. pytorch框架中的LSTM2. 初始化一个RNN模型 3. 初始化ROM的coe文件格式 4. 将参数转换为补码,并且输出到coe文件 5. 配置一个ROM 6. 结论7. 代码 1. pytorch框架中的LSTM pytorch框架将LSTM算法中的八个权值矩阵连接成两个矩阵,假设要导入的LSTM网络的输

随缘分享 4527

【C++总结】函数形参,返回const对象与非const对象,成员函数,函数指针

非引用形参//交换函数,传递的实参只是参数的副本。并不能起到交换作用 void swap(int a, int b) { int m = a; a = b; b = m; }指针形参//可以起到交换作用 void swap(int *a, int *b) { int m = *a; *a = *b; *b = m; }引用形参//可以起到交换作用

沸沸腾的专栏 1059

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 339

C++之const类成员变量,const成员函数

const修饰类的成员函数const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点。https://www.cnblogs.com/cthon/p/9166715.html 类的成员函数后面加 const,表明这个函数不会对这个类对象的数...

weixin_34122548的博客 537

YOLOv11模型剪枝实战:让检测速度翻倍,精度仅降1%的终极优化教程

模型剪枝是YOLOv11落地边缘场景的“关键一步”——它让模型在“瘦身”的同时,几乎不损失精度。从稀疏化训练到通道剪枝,再到工程部署,本教程已为你打通全流程。现在就动手尝试,让你的YOLOv11模型在嵌入式设备、移动端上也能“飞起来”——相信我,当你看到剪枝后的模型在资源受限设备上仍能精准检测时,你会明白这份技术的价值。

m0_64661770的博客 711

FPGA DDR3实战(四):DDR地址映射自动化测试(1)—— 测试程序设计与代码逻辑

本文介绍了一种DDR地址映射自动化测试方案,旨在提高板卡调试效率。方案通过AXI4协议实现主从端通信,构建了包含地址控制器和测试数据生成器的模块化架构。测试程序支持突发传输、状态监控和错误检测,可灵活配置测试参数。采用状态机控制流程,先写入递增数据再读取比对,完成功能验证和性能评估。该方案可系统化验证DDR的正确性、稳定性和可靠性,相比传统手动测试显著提升效率。

FPGA_小田老师的博客 1976

关于C++ const 的全面总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。  一、Const作用    如下表所示:No.作用说明参考代码1可以定义const常量 const int Max = 100;  2

刘明的博客 354

Android 12.0 kenel中修改rom系统内部存储的大小

在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分的值最好了,接下来分析下计算rom容量的 相关代码,然后做出相关的修改,来实现功能

安卓兼职framework和app工程师的博客 1678

【C++ 】const成员函数完全解析

本文介绍了C++中const成员函数的相关概念和使用要点。const成员函数通过修饰this指针来限制函数对类成员的修改,确保const对象的只读性。文章通过Date类示例展示const和非const成员函数的区别,并解答了四种调用场景的权限问题:const对象不能调用非const成员函数,而非const对象可以调用const成员函数;const函数内不能调用非const函数,但非const函数可以调用const函数。此外还提到取地址操作符重载通常使用编译器默认生成即可,除非有特殊需求。最后建议只要成员函数

2402_83411382的博客 1485

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 790

精雕软件(JDpaint) 5.5 绿色版

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

C++中const和非const对象分别调用const和非const成员函数

一、先来提出问题 const对象可以调用非const成员函数吗? 非const对象可以调用const成员函数吗? const成员函数内可以调用其它的非const成员函数吗? 非const成员函数内可以调用其他的const成员函数吗? 二、实践出真知 实践发现: 1、const对象可以调用const成员函数 2、const对象不能调用非const成员函数 3、非const对象可以调用const成员函数 4、非const对象可以调用非const成员函数 5、const成员函数不能调用非const成员函数

weixin_43886592的博客 6038

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

c++ const引用和非const引用

const引用可读不可改,与绑定对象是否为const无关,注意区分const引用与对const对象的引用 非const引用可读可改,只可与非const对象绑定 const int ival = 1024; const int &refVal = ival; // ok: both reference and object are const int &ref2 = ival;

zhaowenchaofang的专栏 2127

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++中const引用和非const引用的使用注意

今天学习时突然有疑惑,C++有了指针为何还要设计引用呢?后来看到一篇博客豁然开朗:为什么 C++ 有指针了还要引用? 总结一下: 1、代码更加简洁好看了 2、由于引用必须被初始化,并且之后也无法修改绑定的对象,这样就更安全了 3、为了操作符重载,比如博客中那个重载 [ ]的例子 并且,在了解了这些之后,对引用的一些其他特性也就一目了然了。 1、const 引用只可读不可写,可以绑定不同类型的con...

bob的博客 1358

c++ const 转 非const

#include "mainwindow.h" #include <QApplication> #include <QtDebug> void fun(const int * temp) { int *p = const_cast<int *>(temp);//const 转 非const *p = 22; } int main(in...

sun 8990

c++ const 转非const

#include <iostream> #include <stdio.h> using namespace std; struct DexHeader{ int off; }; int main() { struct DexHeader dexHeader; dexHeader.off = 3; const DexHeader* lpDexHeader = &...

zhangmiaoping23的专栏 5267

C++ 非const转换为const 特例

一般情况下,非顶层const对象是允许被非const对象赋值(转换)的,但是今天发现一个特例,作为一个mark int main() { int a = 2; int * pa = &amp;a; int ** ppa = &amp;pa; /* const int ** cppa = &amp;pa;*/ const int * cpa = &amp;a; const int *...

daizhiyan1的博客 7057

c++_如何将一个const变量转成非const变量_const_cast

目录 C++提供了四个转换运算符 const_cast(expression) 用const_cast来去除const限定 传统转换方式实现const_cast运算符 为何要去除const限定 前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。 要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一.

惊鸿一博 1万+

C++不能用const对象调用非const方法

今天在写程序时遇到了一个报错: error C2662: 'x' : cannot convert 'this' pointer from 'const class Point3d' to 'class Point3d &' 先看下代码: #include <stdio.h> #include <stdlib.h> #include <iostream...

anlz729的博客 1970

C++ 顶层 const 和底层 const

本文详细解析了C++中const限定符的两种用法:顶层const和底层const。顶层const表示对象本身不可修改,底层const表示指针/引用指向的对象不可修改。

平平无奇的小甜菜 925

【CPP】const放在不同位置的作用

const & constexpr

记忆超差的本人的博客 1865

C++ 中 char*、const char*、char* const、const char* const 的详细区别

C++ 中 char*、const char*、char* const、const char* const 的详细区别

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1715
上一篇: C++基本概念总结——重载(overload)和重写(override)
下一篇: C++基本概念总结——公有继承和私有继承
林 文
博客等级 码龄18年 14粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值