const关键字
修饰类型 char/short/int/long
宏定义与const常量的区别
宏定义
特点
-
在预编译阶段
-
只是替换,没有类型检查,不会检查代码错误
-
宏定义是直接替换不会分配内存
-
宏定义可以通过#undef来使之前的宏定义失效
-
宏定义不能作为参数传递给函数
宏的好处
定义代码或字符串、方法、参数const不能
坏处
使用大量宏,容易造成编译实际久,每次都需要重新替换
const
特点
-
在编译阶段,即程序运行时的一段代码
-
有常量声明,在编译时会进行类型检查,会编译报错
-
const常量定义是要分配内存的,存储在程序的数据段中
-
const常量定义后将在定义域内永久有效
-
const常量可以在函数的参数列表中出现
开发中的使用场景
定义全局只读参数,代替宏,降低编译速度
方法中定义只读参数,不允许更改
const 变量
const int a
不能改变值,必须初始化
const 类变量
const MyClass a
不能修改成员变量,不能调用非const函数
指向const 变量的指针
const int \* a
不能修改指向的内容,可以改变指向的对象
const 指针
int *const a
可能修改指向内容,不能改变指向的对象
指向 const 变量的const 指针
const int * const a
不能修改指向的内容,也不能改变指向的对象const引用
const 变量作为函数参数
void MyMethod(const int a)
函数体内不能修改其值,若是指向const变量的指针做参数,上层可通过一般指针调用
const 返回值
const int &MyMethod()
返回const引用,上层不能通过此引用修改对象
const 成员变量
const int * a
非静态的const成员变量必须在初始化列表里初始化,之后不能改变其值
static const int * a
静态的const成员变量需要单独定义和初始化,不能在初始化列表里初始化
const 成员函数
void MyMethod() const
函数体内的this指针为指向const对象的const指针,该成员函数称为常成员函数,常成员函数只能访问成员变量,而不能修改。只能调用其他常成员函数。