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

四、总结

相关推荐
naruto_lnq3 分钟前
C++中的工厂方法模式
开发语言·c++·算法
独自破碎E3 分钟前
LCR_019_验证回文串II
java·开发语言
一切尽在,你来4 分钟前
C++多线程教程-1.2.3 C++并发编程的平台无关性
开发语言·c++
坚持就完事了7 分钟前
Java中的一些关键字
java·开发语言
雨季66617 分钟前
Flutter 三端应用实战:OpenHarmony “专注时光盒”——在碎片洪流中守护心流的数字容器
开发语言·前端·安全·flutter·交互
新缸中之脑24 分钟前
Moltbook 帖子精选
开发语言·php
xyq202435 分钟前
jQuery Mobile 表单选择
开发语言
郝学胜-神的一滴39 分钟前
深入解析Linux网络编程之bind函数:从基础到实践的艺术
linux·服务器·网络·c++·websocket·程序人生
青岑CTF40 分钟前
攻防世界-Web_php_include-胎教版wp
开发语言·安全·web安全·网络安全·php
雾岛听蓝1 小时前
C++11 列表初始化与右值引用核心解析
开发语言·c++·经验分享