const又一困惑

C++17 std::as_const:安全添加const限定的实用工具详解 在C++编程中,const正确性是保证代码健壮性的核心概念,它通过编译时检查防止对数据的意外修改。其原理是为变量或对象添加不可变性约束,编译器据此进行类型检查。这一特性在工程实践中价值显著,能提升代码安全性、可读性和可维护性,是多线程安全编程的基础之一。常见的应用场景包括定义配置参数、传递只读函数参数、实现const成员函数等。针对非const对象临时需要只读视图的特定需求,C++17标准库引入了std::as_const这一轻量级工具函数,它提供了一种类型安全且意图清晰的方式,将非const左值转换为co 阅读详情
const int a = 1;
    int *p = &a;
    *p = 2;
    int b = a;

    printf("&a=%d,p=%d,b=%d,a=%d,*p=%d",(int)&a,(int)p,b,a,*p);

哪位给我解释下,这段代码编译器是如何编译的?

经过讨论,基本搞清楚了。

c是弱类型语言,c++是强类型的,c++不去const限定会报错。

另:排除编译器的检查,如果我用汇编来混编,那么这个存放a的内存里面这个值,我想怎么改就怎么改,其实就是说const变量是可以被篡改的,它和普通的变量存储位置没有不同。

总结如下:
这个题目是说明了const变量是怎么回事。const变量的内存分配是和没有加const一样的,全局就分配在全局数据段,局部就分配在栈上,这块内存区域是可以被篡改掉的,const变量是在编译期间来做值的替换,它跟宏的区别在于:宏是在预编译期间就做了替换,而且是纯粹的字符替换,而const是在编译期间才做替换的,它设计的初衷就是因为宏没有类型检查 但是增加了类型检查不是白增加的,就是它必须要额外开辟一块内存出来存放这个变量。

深入理解C++ const:从语法到高级应用与性能优化 在C++编程中,类型系统是确保代码安全性和表达力的核心机制之一。const作为类型限定符,其核心原理是为变量、函数参数、成员函数等提供“不可修改”的保证,从而在编译期捕获潜在的错误,增强代码的健壮性。这一特性在现代软件开发中具有重要价值,它不仅是实现常量正确性的基础,还能辅助编译器进行优化,并广泛应用于API设计、资源管理和并发编程等场景。特别是在函数参数传递中,使用const引用能有效避免不必要的拷贝,提升性能。本文聚焦于C++ const关键字的深度解析,系统梳理了顶层const与底层const的区别、 阅读详情

相关推荐

PROFINET非周期数据通信实战:从报文解析到参数读写

本文详细解析了PROFINET非周期数据通信的实战应用,从报文结构到参数读写全流程。通过西门子PLC与驱动器的配置案例,深入讲解非周期通信在工业自动化中的关键作用,包括硬件选型、软件配置及常见问题排查,帮助工程师高效实现设备参数配置与诊断。

weixin_42522953的博客 512

C++ 中 char\ 、const char\ 、char\ const、const char\ const 的区别:一篇彻底讲清指针与 const 的组合

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;是否是否是否声明: X ptrconst 在 * 左侧?指向的内容不可修改指向的内容可以修改const 在 * 右侧?const 在 * 右侧?指针和内容都不可修改指向的内容不可修改指针可修改内容可修改指针不可修改char*内容和指针都可修改这四种声明的本质区别在于。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1225

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

const char*作为返回值的困惑

首先标题都不知道怎么样才能表达这个困惑,索性使用这个是因为当const char*作为返回值的时候有两个困惑之处: 1、如果有下面的情况 const char* Func(std::wstring wstr) { std::string s = TO_ACSII(wstr.c_str());//使用_bstr_t或者自己写的转换函数 return s.c_str(); }

9256

从内参矩阵到归一化平面:揭秘相机成像的标准化核心

本文深入解析了相机成像中的核心概念——归一化平面。通过拆解内参矩阵(包含焦距、主点等参数)的作用,详细阐述了如何将像素坐标转换为与具体相机硬件无关的归一化坐标。这一标准化过程是计算机视觉算法(如多相机系统对齐、视觉SLAM)实现跨设备通用性的关键,能有效提升算法的鲁棒性和泛化能力。

opencv7vision的博客 449

Anasys Workbanch实战解析:齿轮接触强度有限元分析全流程

本文详细解析了在Anasys Workbanch中进行齿轮接触强度有限元分析的全流程。从模型简化、材料赋予、接触对设置,到网格划分艺术、非线性接触求解调试,再到结果后处理与工程解读,提供了避开常见陷阱的实战经验,旨在帮助工程师精准评估齿轮强度与疲劳寿命。

weixin_29209805的博客 344

const关键字与指针:const int_ vs int_ const

本文深入解析C++中const int*与int* const的区别与应用。const int*表示指向常量数据的指针(数据不可改,指针可改),而int* const是常量指针(指针不可改,数据可改)。文章通过代码示例、对比表格和Mermaid图表详细说明了两者的特性,并探讨了实际应用场景(如函数参数安全传递、资源管理)和常见错误。最后强调根据需求选择合适类型,利用const提高代码安全性和清晰度。掌握这些概念对编写健壮的C++代码至关重要。

always_TT的博客 698

QT C++ AI棉花智能变量灌溉工上位机(信创完整版)

北斗履带灌溉机器人/田间分区电磁阀基站 → 多层土壤温湿度/盐分EC传感器实时采集墒情 → 双目AI视觉扫描棉田长势、病苗分布 → AI融合**生育期+土壤墒情+盐分+棉株长势**计算变量灌溉定额、水肥配比、灌溉时长 → 分区电磁阀/变频水泵变量供水,病弱苗地块减量、干旱地块增量;墒情、盐分、长势多因子闭环修正灌水量;多层土壤含水率(0–10/20–40/40–80cm)、土壤EC盐分、土壤温度、空气温湿度、蒸发量、北斗地块坐标、管道水压、水肥罐液位、分区流量计、水泵电机负载、滴灌带压力反馈。

寒寒豆豆软件公司的博客 184

C++中的一些困惑(长期更新中)

这是个人笔记,记录一些学习过程中没有理解以及容易混淆的问题与解答

小雨的分享斋 1711

超越防抖:索尼CXD5254GG芯片如何重新定义电子影像稳定

索尼CXD5254GG芯片通过融合6轴IMU与图像传感器数据,重新定义了电子影像稳定技术。其核心突破在于实时地平线校正、抑制果冻效应和镜头畸变校正,并搭载智能画质控制器提升画面细节。该芯片适用于广播制作、体育娱乐、安防监控和机器人视觉导航等专业领域,提供开箱即用的优化参数配置,大幅缩短开发周期。CXD5254GG不仅实现稳定成像,更通过姿态感知与智能优化,为专业影像应用提供了完整的稳定解决方案。

致力于lidar应用开发 113

【推荐100个unity插件之10】Unity Cinemachine最全的最详细的虚拟相机介绍,详细案例讲解,快速上手

相信很多同学都用过Unity的Cinemachine插件,使用它可以很方便地实现一些摄像机效果,比如摄像机追踪、推拉镜头、分镜等效果。Cinemachine的知识特别的多又很常用,本来是想做一期来讲一下的,结果搜索发现已经有人做过了,而且内容挺全的,但是内容可能比较啰嗦,还有部分没有补充,所以我就先转载下来,后续有时间再优化修改补充,觉得内容不错的,很欢迎大家去支持原作者。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2万+

彻底搞懂 C++ 中 顶层 const 和 底层 const

彻底搞懂 C++ 中的 顶层 const 和 底层 const,分析了 指针常量 和 常量指针与之的关系,分析了 引用 中 const 的使用,总结了 顶层 const 和底层 const 对含有 const 类型转换的公式,理解其实际意义

h2763246823的博客 3194

使用Simulink进行带通滤波器的设计与仿真研究

摘要:本文介绍利用Simulink设计和仿真带通滤波器的方法。通过定义系统需求(保留100-500Hz信号),创建包含多频信号源、加法器和巴特沃斯滤波器的模型,重点展示滤波器频率选择特性。详细步骤包括模块配置、参数设置(中心频率300Hz、带宽400Hz)、信号连接及可视化分析。实验验证了带通滤波器有效提取目标频段信号的能力,为复杂信号处理系统开发提供基础框架。所需工具为MATLAB R2023a和DSPSystemToolbox。

xiaoheshang_123的博客 325

c++中const的详细用法和const char*, char const*, char*const的区别,const和define宏定义的区别

const的详细用法和const char*, char const*, char*const的区别,const和define宏定义的区别 一个电脑小白的自我成长之路,*_^ 下面的代码中编译器会报一个错误,你知道是哪个语句错了吗? ```cpp typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 是p2++出错了。这个问题提醒我们:typedef

weixin_48306625的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

一文理清var,let与const区别

相信许多小伙伴在写代码的时候分不清var,let与const的区别,那么有句话叫做:能用const,就不用let,能用let就不用var。 为什么呢?接下来,我带各位小伙伴理清他们之间的区别。 正文开始了。 变量 ECMAScript变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的命名占位符。有3个关键字可以声明变量: var、 const 和 let。其中,var 在ECMAScript 的所有版本中都可以使用,而const 和 let 只能在ES6及更

m0_57965131的博客 1054

精雕软件(JDpaint) 5.5 绿色版

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

c++ const_cast转换后的const值的问题

这种基本类似的const申明时,编译器会将a1作类似于宏一样的处理,而结构体却不会这样处理。反汇编后,发现&a地址处的值的确是被修改成了9,但编译器在调用。备注:a1的值仍为2;a.b和b.b都被修改成了9。函数时给到的参数值不是从&a地址取值的,是直接给了。

bgape002的博客 372

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

const的使用

C中CONST的使用:const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。  虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。      问题:const变量 & 常量   

248

限定符const用法详解

离变量最近的说明了变量的性质----pi左边是const,说明pi是一个const对象,* 说明pi是一个常量指针,而const int 说明常量指针pi指向的对象是const int 类型的变量,即整型变量。(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量)(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量):表示被限定的对象一旦确定,就不能被修改。

2301_79357377的博客 1724

小白 有关c++ const的一点总结

本人学习程序设计已经快有一年之久,c++也有一个多月了,一直觉得c++中的const很令人蛋疼,于是在写程序时就有意的去避免const的使用,近期在写课程设计时却经常出现关于const的bug,于是就逛论坛决心弄懂const,论坛里说的很乱,于是自己做了一点点总结,本人小白,下面的东西仅供参考!有错,欢迎指出。本人使用vc 6.0编译器 一.const的用法 首先来看下面的几个例子 Cons

selous的专栏 700

const详解

一般来说,我们会用const将那些加以修饰,使之成为常量,但是其出现的位置有很多,总是让人很头疼,这次来记录一下。(参考C++ Primer 第五版)

qq_73758000的博客 995

Dan Saks: const T vs. T const - 中译

本文探讨了C/C++中const关键字的声明规则和使用误区。作者通过分析PhilBauer的咨询案例,指出typedef与const结合使用时常见的理解错误:const VP vectorTable[]实际上声明的是"指向void的const指针数组",而非预期的"指向const void的指针数组"。文章详细解析了声明说明符与声明符的语法结构,强调const的位置决定其修饰对象。作者建议将const置于类型说明符右侧(如void* const)以获得更清晰的语义表达

Hero-Rambo的专栏 949

C/C++ const相关 常量指针 常指针 常指针常量 顶层底层const

在看const相关内容的时候,对const的一些概念还存在部分疑惑,容易搞混,尤其是在变量声明这种情况下。这篇博客就主要写一下const的相关。这篇文章主要是梳理了一下const的一些用法,平常实际运用到,但总是分不清到底指的什么东西,只能知道是个常量。这一遍梳理下来,总归还是有些好处的。

Edwinwzy的博客 816

const 详解

今天看了一下C++ Primer中关于const用法的介绍,讲得很好, 收益匪浅,于是做一个总结,方便以后再次查看。   但是c++在c的基础上新增加的几点优化也是很耀眼的,就const直接可以取代c中的#define以下几点很重要,学不好后果也也很严重。  一、const变量         1、限定符声明变量只能被读    const int i=5;    int j=0;

Hackbuteer1的专栏 1万+

c++中为什么会引入const

c++的提出者当初是基于什么样的目的引入(或者说保留)const关键字呢?,这是一个有趣又有益的话题,对理解const很有帮助。1. 大家知道,c++有一个类型严格的编译系统,这使得c++程序的错误在编译阶段即可发现许多,从而使得出错率大为减少,因此,也成为了c++与c相比,有着突出优点的一个方面。2. c中很常见的预处理指令 #define variablename variab

航海日志---Jim Xu的专栏 1787

C/C++中const关键字的深度解析:从语法到实战的编程契约

在C/C++编程中,类型安全和代码健壮性是核心诉求。const关键字作为一种类型限定符,其核心原理是为变量、函数参数和成员函数提供“不变性”承诺,由编译器在编译期强制执行。这一机制的技术价值在于,它不仅能预防数据被意外修改导致的运行时错误,还能作为清晰的接口文档,提升代码可读性和可维护性。在工程实践中,const广泛应用于函数参数传递、类成员函数设计、指针与引用修饰等场景,确保数据在特定上下文中保持只读状态。例如,通过使用常量引用(const T&)传递大型对象可避免拷贝开销,而常量成员函数则保证了对象状态

weixin_30613343的博客 338

关于const指针的一个常见误区

关于const,我曾因为其在C和C++中的不同,还有一些编译器对未定义的处理不同,搞得晕头转向…后来有次在阅读《C primer plus》中我终于梳理了有关const的结论。

limou3434的博客 167
上一篇: const讨论
下一篇: 快速高效读C代码和读C++代码
speedge
博客等级 码龄19年 8粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值