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

四、总结

相关推荐
葡萄城技术团队14 分钟前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化
qiaosaifei18 分钟前
JAVA老项目中有大量的类名_编译时报找不到符号错误
java·开发语言
聪明蛋子哟22 分钟前
MCP协议深度落地:如何用Python/Java双语言实现统一的工具调用网关?
java·开发语言·python
一晌小贪欢42 分钟前
python-第27天:Python面向对象详解
开发语言·python·数据可视化·面向对象·python办公
raindayinrain1 小时前
c++并发
c++
j7~1 小时前
【C++】智能指针的使用及其原理--详解
c++·c++11·内存泄漏·智能指针·raii·boost智能指针
迪康Defender1 小时前
公用电脑责任追溯难?迪康端点安全一体化管理系统用户模式详解
java·运维·开发语言·网络·其他·安全
16月6日-晴2 小时前
Java面向对象——接口
java·开发语言
wuyk5552 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
geovindu2 小时前
CSharp: Wordcloud
开发语言·后端·c#·.net·.netcore·词云