一.基本作用
1 const与define功能相似,具有定义常量功能。
const定义的常量具有数据类型,编译器会对数据类型安全进行检查,而宏定义则不会。
2可以保护值和指针不会被修改,提升程序的健壮性。
如:一个函数传入指针,不允许修改其指向的内容。
3.与define功能一样,方便的对参数进行修改调整。
4.const 定义的常量,在内存中只由一个,没有多个拷贝。
如:const char *p=“sdasdasda”;
const char *q=“sdasdasda”;
p和q的值相同。
二.函数中const的用法
1 .const形参和实参
当实参初始化形参时,会忽略顶层const。
所以void fun(int i)
{
}与
void fun( const int i)
{
}由于顶层const 被忽略,在编译时,被认为是同一个函数。
三.在类中const的用法
1.首先,一个类的对象或对象指针/引用可以是const
2.其次,类中的成员变量和成员函数可以是const;
值得注意的是,如果一个成员变量是const,那么该成员必须列表初始化。
3.const对象和对象指针/引用,只能调用const成员和成员函数。
4.一个类的拷贝构造函数其参数一般是const引用,参数必须是引用。
而const会有两个好处:
一. 不加入const时,非const变量不能转换成const变量。
二. const变量·
既可以从const和非const左值复制构造,也可以从const和非const右值复制构造。
5.对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。例如:
const classA operator*(const classA& a1,const classA& a2);
operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:
classA a, b, c;
(a * b) = c; // 对a*b的结果赋值
操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。