最近在学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; // ❌ 无法访问(作用域内)
}
四、总结
