const和#define的区别

本文详细对比了C/C++中const与define在编译处理阶段、类型安全检查、存储方式及调试工具支持方面的区别。同时,深入解析了const在C/C++中的多种用途,包括类型限定、内存分配特性、连接属性、值替代、指针修饰、函数参数与返回值、类成员变量及对象限制等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、编译处理阶段不同:define是在预处理阶段进行宏展开,const是在编译运行阶段。
2、类型和安全检查不同:const常量有具体的类型,在编译阶段会执行类型检查,而define没有。
3、存储方式不同:const常量会进行内存分配(C++中,对于简单类型的临时常量会保存在符号表里面进行替换,而不会分配内存),而define仅仅是展开,不会分配内存。
4、有些调试工具可以对const进行调试,但是不能对宏定义进行调试。

附const的几点说明:
1、C默认const是外部连接的,C++默认const是内部连接的。
2、const修饰变量的值,并非不可改变。比如强转。
3、const限定词作用类型:
1)简单常量(C++中,称为值替代,因为不会分配内存)
const int c = 100;
2)指向const的指针(p is a pointer to const int)
const int *p
3)const指针(p is a const pointer to int)
int * const p
4)函数形参(意义不大,用于指向const指针时OK)
int func(const int a)
5)const返回值
const int func()
6)const类成员变量
只在对象存在的生命周期内是不可变的,所以不同的对象有可能是不同的。
并且需要通过构造函数初始化,或声明为static类型。
如果需要编译期常量,保证所有的对象一致,可以定义为枚举类型,或者static const类型。
7)const对象和const成员函数
int func() const;
const对象保证类公有成员变量不会被修改。
const成员函数保证不会修改类成员变量。任何不修改成员数据的函数应该声明为const函数。
但是在const成员函数内,使用mutable修饰的成员变量,是可以被修改。
只有const成员函数才能被const对象调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值