这里总结const出现的情况,核心:“只读”(可以使常量和变量,但不能通过你这里对他进行改变)
1、顶层/底层const
由于指针本身是个对象,指针所指也是一个对象,二者独立。只有指针区分顶层/底层,
const char* p=greeting; //底层const,所指内容为常量,常见方式。
char* const p=greeting //顶层const.指针(地址)是常量,表明不能指向不同的东西。
2、Const形参
形式:void fcn(const int var)
形参是const,在实参初始化时会自动忽略掉顶层const,意思是传给它常量或非常量对象都是可以的。
意义:const限定传递过来的参数在函数内不可以改变,在该函数内不能对var进行修改。
PS:
如果函数无须改变引用形参的值,最好将其声明为常量引用。例如比长度:void isshort(const string &s1,const string &s2);
3、Const成员函数
修改this指针的类型,将其从常量指针改变为指向常量的指针,更加灵活。
形式:string isbn() const {return this->BookNo}; 将const关键字放在成员函数的参数列表后面。
意义:只能读取数据成员,不能改变数据成员。
(1)const成员函数,只能读取对象的数据成员,不能改变。所有类型的对象都可以访问。
(2)const对象可以调用const成员函数,而不能调用非const修饰的函数。