当前位置: 首页 > article >正文

【C++八股】const和define的区别

1. #define(宏定义)

作用:使用 预处理器(Preprocessor)在编译前进行文本替换
本质无类型检查的纯文本替换

2. const(常量)

作用:定义类型安全的常量,在编译阶段进行检查。
本质:真正的变量,有类型检查,可以调试。

特点

  • 有类型检查,更安全。
  • 可以调试,错误信息会明确指出变量问题。
  • 可能占用内存(编译器优化后可能会直接替换)。
  • 支持作用域控制(可以是局部变量或全局变量)。

3. const vs #define 对比

4. #define vs const 考点

  1. 为什么 #define 不能完全替代 const

    • #define 只是文本替换,没有类型检查,容易出错。
    • const 变量有类型,编译器可以进行安全检查
  2. const 变量会占用内存吗?

    • 不一定,如果 const 变量没有取地址,编译器通常会直接替换成字面值,不会占用额外内存。
  3. 什么时候应该用 const 而不是 #define

    • 需要类型安全时,应该使用 const
    • 需要可调试性时,应该使用 const
    • 需要局部作用域时,应该使用 const

最佳实践

  • 定义常量用 const,不要用 #define
  • 如果是数组大小等,可以用 constexpr 代替 const(C++11+)。

http://www.kler.cn/a/538114.html

相关文章:

  • 【大模型】DeepSeek-V3技术报告总结
  • 深度学习|表示学习|Instance Normalization 全面总结|26
  • 哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测
  • 常用的python库-安装与使用
  • Games202 Lecture11 LTC | Disney principled BRDF | NPR
  • VLLM历次会议(2024.1)
  • 在亚马逊云科技上云原生部署DeepSeek-R1模型(下)
  • Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
  • 基于HTML5 Canvas 的盖楼游戏
  • 大数据治理新纪元:全面解读前沿开源技术的力量
  • DeepSeek——DeepSeek模型部署实战
  • 使用 OpenGL ES 加载图片并写入纹理单元
  • 推理大模型DeepSeek迅速觉醒
  • LeetCode:63. 不同路径 II(DP Java)
  • 腾讯云TI平台×DeepSeek:开启AI超强体验,解锁部署秘籍
  • Linux iftop 命令使用详解
  • 机器学习数学基础:20.方程组解的结构
  • React受控组件的核心原理与实战精要
  • 从0到1深入大数据治理:解锁数据价值的密码
  • Spring Boot 3.4 中 MockMvcTester 的新特性解析
  • 【对比测评】 .NET 应用的 Web 视图控件:DotNetBrowser 或 EO.WebBrowser
  • python实现物体轮廓提取及标注【含源码方案及演示】
  • 尚硅谷课程【笔记】——大数据之Zookeeper【二】
  • Java算法技术文章:深入解析排序、搜索与数据结构
  • mojo语言适合开发机器人控制系统么?
  • Java高级-反射动态代理