1.常函数:
在C++中,当成员函数被标记为const 时,这个函数被称为常量成员函数或。常函数的特点是在函数体内不会修改类的成员变量(除非成员变量被声明为mutable)。
常函数的声明格式如下:
cpp
void functionName() const;
this指针的本质是指针常量,指针常量的指向是不可以修改的,就相当于:
cpp
Person *const this;
在成员函数后面加const修饰的是this指向,让指针指向的值也不可以修改。
在常函数中,通过this指针访问的成员变量都被视为常量,并且不允许对它们进行修改,除非将特定成员变量声明为mutable关键字。
例如:
cpp
class MyClass {
public:
int a;
mutable int b;
void modifyA() const {
// 不允许修改 a
// a = 10; // 错误
// 允许修改 b
b = 20;
}
};
在上面的代码中,a 是常量成员变量,因此在常函数modifyA() 中不能对其进行修改。然而,b 被声明为mutable(adj.可变的),所以即使在常函数中也可以对其进行修改。
2.常对象:
常对象是指用关键字const 修饰的对象,也称为常量对象。常对象的成员变量在对象创建后就不能被修改。
在C++中,使用const关键字可以将对象声明为常对象。常对象只能调用常量成员函数,因为常对象不允许对其成员变量进行修改。
例如:
cpp
class MyClass {
public:
int a;
void modifyA() {
a = 10;
}
void printA() const {
// 常函数可以被常对象调用
// 常函数不会修改对象的成员变量
cout << "a = " << a << endl;
}
};
int main() {
const MyClass obj; // 声明一个常对象
obj.a = 5; // 错误,常对象的成员变量不可修改
obj.modifyA(); // 错误,常对象只能调用常量成员函数
obj.printA(); // 正确,常对象可以调用常量成员函数
return 0;
}
3.总结:
1.常函数:
(1)指const修饰的成员函数
(2)常函数不会修改类的成员变量(除非成员变量被声明为mutable)
2.常对象:
(1)指用关键字const修饰的对象
(2)常对象的成员变量在对象创建后就不能被修改
(3)常对象只能调用常量成员函数,因为常对象不允许对其成员变量进行修改。