c++中的常量折叠 ,const与define是属于预编译的时候就被解析

C++静态反射实现:从宏技巧到序列化实战 反射(Reflection)作为程序自省的核心机制,允许程序在运行时或编译期观察和修改自身结构。其原理在于通过类型元数据描述数据结构,实现动态访问成员变量、调用方法等能力。这项技术的核心价值在于消除重复代码,提升工程效率,尤其在需要处理大量异构数据的场景中。在C++中,由于标准库缺乏原生支持,开发者常借助宏和模板元编程实现静态反射,以达到零运行时开销的目标。应用场景广泛覆盖序列化/反序列化、对象关系映射(ORM)、脚本绑定及UI数据绑定等领域。本文聚焦于C++静态反射的实现,通过解析宏技巧和模板元编程,构建 阅读详情

转载:http://blog.youkuaiyun.com/yafeng_jiang/article/details/7101964

先来看一个例子:

  1. #include <stdio.h>  
  2.   
  3. int main() {  
  4.     const int a=9;  
  5.   
  6.     int *p=(int*)&a;  
  7.     *p=10;  
  8.       
  9.     printf("%p %p\n", &a, p);       //0012FF7C 0012FF7C  
  10.     printf("a: %d , *p %d\n",a,*p); //a: 9 ,*p: 10  
  11.       
  12.     return 0;  
  13. }  

        由例子的结果发现:&a,p是同一块地址,但它们的输出结果却不相同。

        这就是编译器的”常量折叠”在作怪啦!

        "常量折叠"就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。

        编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏替换似的: #define pi 3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!

        如果不想要编译器的这种优化就要用到volatile关键字啦。

  1. const int a=9;  

修改为:
  1. volatile const int a=9;  

即可。




#pragma region与#pragma endregion一对预处理指令,折叠特定的代码 #pragma region 是Visual C++中特有的预处理指令,也是一个Visio Studio Code Editor中的命令,来定义可以扩展和收缩的代码区域的开头和结尾,可以用来收缩或者展开一段代码。从而使界面更加清洁,便于编辑其他代码。折叠后的代码块不会影响编译。你也可以随时展开代码块以进行编辑等操作。 注意:pragma endregion 标记代码段的结束,一个#region必须以#pragma endregion结束。 格式:#pragma region name /* ******* 阅读详情

相关推荐

ABAP代码使用OAuth2.0 Client Credential调用外部API

ABAP-OAuth2.0-调用外部API

m0_74015269的博客 1956

c++中的常量折叠

先来看一个例子: #include int main() { const int a=9; int *p=(int*)&a; *p=10; printf("%p %p\n", &a, p); //0012FF7C 0012FF7C printf("a: %d , *p %d\n",a,*p); //a: 9 ,*p: 10 return 0; }

半仙姜 2563

Python+Selenium实现抖音博主批量监控:300+账号实时更新通知(附完整代码)

本文详细介绍了如何使用Python和Selenium构建一个高可用的抖音博主批量监控系统。通过架构设计、Cookie管理、高效轮询与差异检测等核心模块,实现300+账号的实时更新追踪与通知。文章提供了完整的代码实现,并重点探讨了性能优化、异常处理及服务器部署等实战经验,帮助开发者打造稳定、可控的自动化监控解决方案。

weixin_29274969的博客 194

C++笔试题解析

经典C++笔试题解析 1、private 与 protect 关键字的区别。 派生类能访问基类的protect成员而不能访问private成员。Private对派生类及用户都不可见,public对派生类和用户都可见,private介于二者之间,对派生类可见对用户不可见。   2、友元,friend 如何声明一个友元。   3、缺省构造函数。当类声明了一个带参

Wallace 1796

python opencv的车牌识别分割详细教程 毕业设计

python opencv的车牌识别分割详细教程 毕业设计

机器学习深度学习业余选手 1327

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

c++的常量折叠

何谓常量折叠? 常量折叠就是将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。(预编译阶段) 接下来我们通过一段代码来分析一下了解一下常量折叠及其特性: int main() { const int a = 10; int b = 2*a; int c = b; int *p = (int*)&a; *p = 100; cout << a << endl;//输出10 cout&lt...

u011749929的博客 1224

从 30 天试用到企业级落地,2026 年学习和试用 SAP AI 的完整路线图

摘要:SAP AI产品体系存在试用版本与商业版本的边界模糊问题,需区分业务嵌入AI(如Joule)、开发者工具(SAP Build Code)和AI基础平台(Generative AI Hub)三个层级。建议学习路径:1)通过SAP Learning专区掌握理论框架;2)优先使用30天Generative AI Hub基础试用体验模型编排;3)结合90天BTP试用账户开发完整应用。特别注意免费计划已陆续停止,需以最新官方文档为准。开发者应重点关注AI如何与SAP技术栈(CAP、Fiori等)集成,而非单纯功

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 115

const用法详解

const (1)可以定义 const 常量 (2)const 可以修饰函数的参数、返回值. 加粗样式 详细内容: 1、什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:) 2、为什么引入const? const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 3、cons有什么主要的...

zhwlc的博客 1万+

【2026年华为秋招(AI)-2月4日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要:本文包含20道选择题,涵盖机器学习、线性代数、Transformer架构、概率统计等多个领域。题目涉及正交矩阵性质、Transformer注意力机制、聚类距离度量、ReAct框架、Softmax函数、混淆矩阵计算、Flash-Attention优化、位置编码、期望计算、归一化方法、矩阵迭代法、矩阵秩、大模型架构、神经网络推理、泊松流性质、SVM核函数以及聚类算法等知识点。每道题均提供解析,帮助理解核心概念和解题思路。

m0_73659489的博客 125

AutoSAR系列讲解 - 总目录

博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上

雪云飞星的博客 49万+

c++常量折叠(常量替换)

#include  using namespace std;   void main() {     const int a = 5;     int *p = (int *)&a; //让p指向与a相同的内存空间     cout        *p = 10

打破沙锅问到底的专栏 768

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1369

安卓启动流程与期间核心组件工作原理

本文以实际工作中出现的启动相关各种千奇百怪的bug为钩子,讲解了安卓app冷启动过程中核心组件的工作原理,pms -> packageParser/androidmanifest.xml -> context -> ams -> application -> activity -> layoutInflater资源加载过程 -> wms /window/WM -> view与viewgroup绘制原理 -> 渲染阶段。理供解决问题的思路,看业务框架代码能看懂他们改的哪块源码,跟他们扯皮能扯赢

mix39的博客 337

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++学习记录 - 常量折叠

转自:https://www.cnblogs.com/stemon/p/4406824.html 0.前言 前几天女票问了我一个阿里的面试题,是有关C++语言的const常量的,其实她一提出来我就知道考察的点了:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配区是很普通的栈或者全局区域。也就是说const常量只是编译器在编译的时候做检查,根本不存在什么read-only的区域。 所以说C++的const常量和常量字符串是不同的,常量字符串是存储在read-only的

行仔ovo的博客 1203

精雕软件(JDpaint) 5.5 绿色版

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

C++常量折叠

c++的常量折叠

catalpeak的博客 321

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C 语言的关键字 const详解

                              C 语言的关键字 const详解1, 基本的const1.1 const和变量的初始化     如果在定义const自动变量时没有进行初始化,那么就没法直接进行初始化,而只能通过指针间接进行初始化。intmain()    {    const int a;    a = 9;            //这里无法通过编译     //错误

zg_hover的专栏 1193

const和预编译指令define

引用和指针的区别 c语音没有引用的概念 引用就是给变量器一个别名 ,一个引用只能在定义的时候确定所引用的变量,以后都不能改变所引用的变量 引用没有独立的存储空间,,跟被引用的变量共享存储空间 对引用所做的改变,就是所引用的变量所做的改变 指针有独立的存储空间 指针的值是可以变得 引用的值不能为空,指针可以为空 sizeof 引用所得到的是引用变量的大小,sizeof得到的是指针的大小 ...

BianHuanShiZhe的专栏 457

c语言常量折叠,为什么C ++编译器的常数折叠效果更好?

强制编译器通过0和1优化乘法的一种方法是手动展开循环。 为了简单起见,我们使用#include #include constexpr std::size_t n = 12;using Array = std::array;然后,我们可以使用折叠表达式(或递归(如果不可用,则递归))实现一个简单的for (std::size_t i = 0; i < n; ++i) ...函数:templat...

weixin_39843431的博客 234

var;let;const—预编译

预编译 变量声明提前 函数声明提前 变量赋值位置不变 <script type="text/javascript"> var a = 1; console.log(a); function test(a) { console.log(a); var a = 123; console.log(a); ...

zenkle的博客 692

const(常量)与define(宏)的正确使用

一.首先介绍下const与宏的区别,这也是面试中经常问到的问题: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量。编译时刻:宏是预编译(编译之前处理),const是编译阶段。编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。宏的好处:宏能定义一些函数,方法。 const不能。宏的坏处:使用大量宏,容易造成编

ideas press的专栏 4391

讲通C/C++预编译/条件编译指令 #ifdef,#ifndef,#endif,#define,…

讲清楚C/C++预处理指令#define,#ifdef,#ifndef,#endif…等的妙用,作为阅读redis源码的首战!

看,未来的博客 5353

const在编译期的替换问题

一、 const和引用的区别  //const关键字 const int a = 10; int b = a; //使用值,发生替换 const int *p = &amp;a; //使用地址,不发生替换 //解引用,用到就替换 int c = 10; int &amp;d = c; //替换 在C++标准中并没有强制规定将一个const 常量转换为一个非const...

仰望星空 1661
上一篇: 和大家说说gdb调试多进程——exec函数族
下一篇: 关于标准c中的strtok和linux库里面的strsep
RunBoying
博客等级 码龄17年 41粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值