this
指针是一个指向当前对象的指针。在C++中,this
指针通常用于访问类的成员变量和成员函数。当一个成员函数被调用时,编译器会自动将当前对象作为第一个参数传递给该函数,这个参数就是this
指针。
this指针的本质是指针常量,指针的指向是不可以修改的
在成员函数后面加上const,修饰的是this指向,让指针指向的值也不可以修改。
在C++中,const
关键字用于修饰成员函数,成员函数后面加const,称为常函数
1、该成员函数不能修改类的成员变量(变量)。当一个成员函数被声明为const
时,它只能访问常量成员变量,而不能修改它们。这有助于确保类的成员函数不会意外地改变对象的状态。
2、成员变量(属性)加关键字mutable后,在常函数中依然可以修改
例如,假设有一个名为Person
的类,其中包含一个名为m_age和m_b
的成员变量和一个名为setAge
的成员函数。
class Person {
public:
void setAge(int newAge) const {
this->m_age = newAge; // 这里可以不正常赋值,因为函数是const的
this->m_b = newAge; // 这里可以正常赋值,因为成员变量是const的
}
int m_age;
mutable int m_b
};
对象前面加const称该对象为常对象
1、常对象是指对象的值在创建后不能被修改。在C++中,如果一个对象被声明为常对象,那么它的成员变量也不能被修改。
2、成员变量(属性)加关键字mutable后,在常对象中依然可以修改
例如以下test02的代码
class person {
public:
void setAge(int newAge) const {
this->m_age = newAge; // 这里可以正常赋值,因为函数是const的
}
int m_age;
mutable int m_b;
};
void test02()
{
const person p;
p.m_age=10://错误
p.m_b=10;//正确,可以修改,因为在类中mutable int m_b;
}
常对象只能调用常函数,如下述代码中test02中的注释部分
class person {
public:
void setAge(int newAge) const {
this->m_age = newAge; // 这里可以正常赋值,因为函数是const的
}
void fun()
{
}
int m_age;
mutable int m_b;
};
void test02()
{
const person p;
p.m_age=10://错误
p.m_b=10;//正确,可以修改,因为在类中mutable int m_b;
p.setAge(100);//正确,常变量只能调用常函数
p.fun();//错误,常变量只能调用常函数,不可调用其他
}