C++中#define和const的区别

最近在学C++,遇到一个问题,写成文章记录下来

一、相同点

二、不同点

三、具体例子

示例 1:文本替换问题

bash 复制代码
#define A 3+4
const int B = 3+4;

int main() {
    int x = 2 * A; // 实际替换为 2 * 3 + 4 = 10 ❌
    int y = 2 * B; // 计算为 2 * 7 = 14 ✅
}

#define 是"纯文本替换",所以 2 * 3 + 4 按运算优先级变成 10。

const 会真正参与计算,结果是 14。

示例 2:类型检查

bash 复制代码
#define N 3.14
const int M = 3.14; // 编译器会警告或报错类型不匹配 ✅

#define 不会检查类型错误,const 会。

示例 3:作用域

bash 复制代码
void f() {
    #define X 10
    const int Y = 20;
}
void g() {
    std::cout << X; // ✅ 仍然可用(全局替换)
    std::cout << Y; // ❌ 无法访问(作用域内)
}

四、总结

相关推荐
学编程的小虎3 小时前
用 Python + Vue3 打造超炫酷音乐播放器:网易云歌单爬取 + Three.js 波形可视化
开发语言·javascript·python
€8113 小时前
Java入门级教程23——配置Nginx服务器、轻量级HTTP服务开发、前后端分离实现完整应用系统
java·开发语言·仓颉·生成验证码
yunson_Liu3 小时前
编写Python脚本在域名过期10天内将域名信息发送到钉钉
开发语言·python·钉钉
星秀日3 小时前
框架--SpringMVC
java·开发语言·servlet
怎么没有名字注册了啊4 小时前
查找成绩(数组实现)
c++·算法
勤奋菲菲4 小时前
Vue3+Three.js:requestAnimationFrame的详细介绍
开发语言·javascript·three.js·前端可视化
要天天开心啊5 小时前
Java序列化和反序列化
java·开发语言
二宝1525 小时前
黑马商城day1-MyBatis-Plus
java·开发语言·mybatis
AI+程序员在路上5 小时前
QT6中Combo Box与Combo BoxFont 功能及用法
c++·qt