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; // ❌ 无法访问(作用域内)
}

四、总结

相关推荐
mjhcsp9 分钟前
C++ KMP 算法:原理、实现与应用全解析
java·c++·算法·kmp
好大哥呀13 分钟前
C++ IDE
开发语言·c++·ide
WW_千谷山4_sch24 分钟前
MYOJ_10599:CSP初赛题单10:计算机网络
c++·计算机网络·算法
BHXDML25 分钟前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
Wang's Blog28 分钟前
Nodejs-HardCore: 深入解析DBF文件之二进制文件处理指南
开发语言·nodejs
hoiii18729 分钟前
基于LSB匹配的隐写术MATLAB实现程序
开发语言·matlab
J2虾虾36 分钟前
Java使用的可以使用的脚本执行引擎
java·开发语言·脚本执行
幻云201039 分钟前
Next.js指南:从入门到精通
开发语言·javascript·人工智能·python·架构
老马识途2.041 分钟前
java处理接口返回的json数据步骤 包括重试处理,异常抛出,日志打印,注意事项
java·开发语言
CCPC不拿奖不改名1 小时前
网络与API:从HTTP协议视角理解网络分层原理+面试习题
开发语言·网络·python·网络协议·学习·http·面试