int* const p = &a; 指针常量
作用:p指向a不能改变,能通过*p修改a的值
/*
* 指针常量,const后面变量的值不能改,因为指针p是一个地址,
* 所以 int *const p = &a; 中p一旦确定指向a的地址,
* p的指向就不能改变,p=&b就是错误的示例
* 但是*p的值是可以改变的
*/
#include <iostream>
using namespace std;
int main() {
int a = 0, b = 10;
int* const p = &a;
cout << "修改前a=" << a << endl;
*p = 20;
cout << "修改后a=" << a << " " << "*p=" << *p << endl;
// p = &b;错误
}
const int* p = &a;常量指针
作用:不希望用户通过*p去修改a的值,但能修改p的指向
/*
* 常量指针,const后面变量的值不能改,*p是一个值,
* 所以 const int * p = &a; 中p一旦确定指向a的地址,
* 就不能通过修改*p的值去改变变量a,*p = 20就是错误的示例
* 但是p的指向是可以改变的,*p的值也会随着指向地址而发生改变
*/
#include <iostream>
using namespace std;
int main() {
int a = 0, b = 10;
const int* p = &a;
cout << "声明const int* p = &a;后" << endl;
cout << "*p=" << *p << endl;
cout << "p=" << p << endl;
p = &b;
cout << "声明p = &b;后" << endl;
cout << "*p=" << *p << endl;
cout << "p=" << p << endl;
//*p = 20;错误
}
const int * const p =&a;p的指向和*p的值都不能改变
#######################################
const修饰成员函数
格式:
返回值类型 函数名() const;
(1)常函数内不可以修改成员属性
(const 修饰的是this指针,this指针相当于 类名* this;
修饰后相当于const 类名 * this ,所以常函数内不能改变成员函数的值了)
(2)成员属性声明时加关键字mutable后,在常函数依然可以修改
(3)常成员函数只能调用类的常成员函数
class Person {
public:
int age;
int mutable total;
public:
void f() const;
};
void Person::f() const {
//this->age =20;//不合法
this->total = 30;
}
常对象
格式:
const 类 对象名;
常对象只能调用常函数