1、常函数
首先上代码:
class Person
{
public:
void showPerson() const//函数后面用const修饰了
{
m_Age = 20;
cout << "年龄:" << m_Age << endl;
}
int m_Age=18;
string m_Name;
};
int main()
{
Person p1;
p1.showPerson();
}
出现报错
在函数后面加了个const,这个函数就叫常函数,那就意味着这个函数不能够修改int string等普通类型的成员属性,这是因为const修饰了这个函数体内的this指针的指向,相当于 const Person *const this,其值和指向都不能够改变了。
但是如果在int string等普通类型的成员定义的时候在其前面+上 mutable 关键字修饰,那么这个常函数就可以和其他普通函数一样可以修改该成员的属性。如下:
mutable int m_Age;
2、常对象
我们重新定义一个p2对象,然后用const修饰了,可以看到,修改成员变量的时候,未+mutable 的m_Name成员变量出错了,而+mutable修饰的m_Age成员变量能编译通过。并且p2只能调用常函数,普通函数不能调用,即常对象和常函数是配套使用的。