const和#define的区别

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对象调用。

你可能感兴趣的:(编程基础)