C++中const非常多才多艺。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
一。const与指针、引用:
pointer-to-nonconst可以初始化或赋值给pointer-to-const,反之不可以,只有一个例外:字符串字面值可以赋值给char* 类型指针;
referece-to-nonconst可以初始化referece-to-const,反之则不可以。
二。const与一般函数重载:
函数可以根据其引用型参数(指针和引用)引用或指向的类型是否为const进行重载,但不可以根据引用参数本身是否为const进行重载,也不可以根据函数的非引用类型参数是否为const进行重载。
如:
void func(char* p)和void func(const char* p) 重载;
void func(char& p)和void func(const char& p)重载。
三。const与成员函数:
成员函数声明式和定义式的后面加关键字const可将成员函数设为const类型,它不可修改类的数据成员(静态成员及mutable成员除外)。
成员函数可以仅仅根据其是否为const类型进行重载。
constt对象只能调用const成员函数。
const对象:如果根据const类型重载了,调用const成员函数,如果没有重载,调用存在的那个。
四。替代#define宏:
应该尽可能使用const替代#define宏。
五。专属类的const:
const数据成员是专属类对象的,而不是类;
static const数据成员是专属类的const。