1.介绍
- 成员函数后加const称为常函数。
- 常函数内不可以修改成员属性。
- 成员属性声明时加关键字mutable后,即使在常函数中依然可以进行修改。
- 声明对象前加const称为常对象。
- 常对象只能调用常函数
- this指针的本质是指针常量。(引申:指针常量:指针的指向不可修改,指针指向的值可以修改。常量指针:指针指向可以修改,指针指向的值不可修改)
2.上代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Person {
public:
Person(int a,int b) {
this->a = a;
this->b = b;
}
void Persons() const{
/*this的创建相当于Person* const this,在常函数中相当于又添加了一个const,
即:const Person* const this.这时this的指向与指向的值均不可以修改*/
this->a = 5;//错误
this->b = 5;//正确
}
void Personss() {
}
int a;
mutable int b;
};
int main() {
const Person p1(5, 6);
p1.a = 3;//错误,左值不可修改
p1.b = 3;//正确,b有mutable修饰
p1.Personss()//错误,常对象只能调用常函数,以为不能确定普通成员函数是否会修改常对象的属性
}