前言
常函数
成员函数后加 const 我们可以称这个函数为 常函数
 常函数内不可以修改成员属性
 成员属性声明时加关键字 mutable 后,在常函数中依然可以修改
常对象
常对象
 声明对象前加 const 称该对象为常对象
 常对象只能调用常函数
正文
常函数
class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const 
	{
		m_A = 10;
	}
	int m_A;
};
 
看看上面的代码
 常函数 是不可以修改里面的值
 加了 const 以后 ,这个函数里面
 this 指针从 Person * const this 变成了 const Person * const this , 又因为 m_A 等价于 this->m_A , 所以 m_A 不是可以修改的左值
 
 怎么修改呢
 使用 mutable 修饰成员变量,以允许在 const 成员函数内修改它:
class Person
{
public:
    void showPerson() const 
    {
        m_A = 10;  // 在 const 成员函数内部修改成员变量,因为 m_A 被声明为 mutable
    }
    mutable int m_A; // 使用 mutable 关键字
};
 
常对象
常对象对变量的调用
class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const // 加const 让 this  指向的指针不可以修改
	{
		m_A = 10;
	}
	mutable int m_A;
	int m_B;
};
//常对象
// 声明对象前加 const 称该对象为常对象
// 常对象只能调用常函数
void test()
{
	const Person p; // 在对象前加 const ,变为常对象
	p.m_A = 10;   // 正确的 , 可以修改
	p.m_B = 10;   // 错误的
}
 
常对象只能调用常函数
class Person
{
public:
	// this 指针的本质是 指针常量 , 指针的指向是不可以修改的
	void showPerson() const // 加const 让 this  指向的指针不可以修改
	{
		m_A = 10;
	}
	void fun()
	{
		m_B = 10;
	}
	mutable int m_A;
	int m_B;
};
//常对象
// 声明对象前加 const 称该对象为常对象
// 常对象只能调用常函数
void test()
{
	const Person p; // 在对象前加 const ,变为常对象
	p.showPerson();  // 正确的
	p.fun();   // 错误的
}
 
如果上面中 p.fun(); 可以实现的话 ,那么就会修改 m_B 的值,这就违背了常对象不能修改一般的值的规则,所以不能调用






![[Qt]窗口](https://img-blog.csdnimg.cn/5f9217ccdf154bcc9ad9ec37435334b6.png)












