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

四、总结

相关推荐
NEU-UUN1 小时前
C语言 . 第三章第三节 . 变参函数
c语言·开发语言
第七序章1 小时前
【C + +】C + + 11(中)——Lambda 表达式 + 可变参数模板
c语言·c++·算法·1024程序员节
hnxaoli1 小时前
win10程序(十四)pdf转docx简易版
开发语言·python·pdf
CodeCraft Studio1 小时前
PDF处理控件Aspose.PDF教程:在Python中向PDF文档添加页面
开发语言·python·pdf
ftpeak2 小时前
《Rust+Slint:跨平台GUI应用》第五章 基础元素
开发语言·ui·rust·slint
寻找华年的锦瑟2 小时前
Qt Quick Application&&Qt Quick Application (compat)
开发语言·qt
国服第二切图仔2 小时前
Rust开发实战之WebSocket通信实现(tokio-tungstenite)
开发语言·websocket·rust
echoyu.2 小时前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
麦麦大数据3 小时前
MacOS 安装Python 3.13【同时保留旧版本】
开发语言·python·macos·python安装
上去我就QWER5 小时前
Qt中如何获取系统版本信息
开发语言·qt