const除了可以修饰变量外,其还可以在类函数的末尾添加const
一般的成员函数如:
class A {
public:
void modify(int n);
};
实际的modify相当于是void modify(A *this, int n),
这里传递的是一个A的指针类型,但这也意味着这个modify函数可能会对成员变量进行修改。
而将代码修改为:
class A {
public:
void modify(int n) const;
};
那么modify相当于是void modify(const A *this, int n),
即这里的this是指向const A的,因此该方法不能通过this来对本对象的变量进行修改
那么下面的代码是否能成功执行呢?:
class A {
public:
void modify(int n) const {
num = n;
}
private:
int num;
};
int main() {
A a;
a.modify(3);
return 0;
}
这里是不能成功执行的,
首先由上面的方法,我们可以知道,void modify(int n) const实际是void modify(const A *this, int n),
那么整个方法就相当于为:
void modify(const A *this, int n) {
this->num = n;
}
这显然是不对的
接着下面这份代码是否能成功执行呢?:
class A {
public:
void modify(int n) {
}
void modify1(int n) const {
}
};
int main() {
const A a;
a.modify(3);
a.modify1(3);
return 0;
}
这里的a.modify(3)是错误的,而a.modify1(3)是正常执行的
还是将代码还原相等的代码
void modify(int n)->void modify(A *a, int n) {}
void modify1(int n) const -> void modify(const A *a, int n) {}
而const A a,是const A类型,而c++中是不允许将const T*转换给T*的(除了用const_cast<T*>),那么自然对于void modify(int n)是错误的
而void modify1(int n) const是正确的