const在函数定义或声明时后置的用法
比如函数:int function()const;
该函数只有是类的成员函数时才有意义,举例如下
class Name{
private:
int data;
public:
int funcA();
int funcB()const
{
data=520;//编译报错,表达式必须是可修改的左值
}
};
两者的区别:
在函数funcA中可以修改类的成员变量data,此时this指针类型为Name*
在函数funcB中不能修改类的成员变量data,因为此时this指针的类型为const Name*
在类的成员函数的声明和定义中,const修饰的函数不能对其成员数据进行修改,因为const对象不能引用非const成员函数
在一般情况下,const修饰的函数不能改变对象状态,即修改类的成员变量
如果非要在const函数中修改类的成员变量——关键字 mutable
class Name{
private:
mutable int data;
public:
int funcA();
int funcB()const
{
data=520;//OK,等于1314都没问题
}
};
用mutable修饰的成员变量,const函数也能对其进行修改
有待解决的问题:
class A
{
private:
mutable int data;
public:
void func()const
{
data = 34;
cout << data << endl;
}
void func1()
{
cout << "今天更精彩" << endl;
}
};
int main()
{
A *b = nullptr;
b->func();//有点不太明白这里为什么会出问题
b->func1();
}