1.介绍
在C++中,函数定义后加const修饰符表示该成员函数是一个常量成员函数。这种函数承诺不会修改调用它的对象的状态。具体来说,常量成员函数不能修改类的任何非静态成员变量,也不能调用任何非常量成员函数。
2.使用语法
class MyClass {
public:
void myFunction() const; // 常量成员函数
};
3.特点
(1)不修改对象状态:常量成员函数不能修改类的非静态成员变量。(除非变量被声明为mutable)。
(2)调用限制:常量成员函数只能调用其他常量成员函数,不能调用非常量成员函数。
(3)对象调用:常量成员函数可以被常量对象和非常量对象调用,但非常量成员函数只能被非常量对象调用。
4.示例
class MyClass {
public:
int value;
// 常量成员函数
void printValue() const {
std::cout << "Value: " << value << std::endl;
// value = 10; // 错误:不能修改成员变量
}
// 非常量成员函数
void setValue(int newValue) {
value = newValue;
}
};
int main() {
const MyClass obj1;
obj1.printValue(); // 正确:常量对象可以调用常量成员函数
// obj1.setValue(5); // 错误:常量对象不能调用非常量成员函数
MyClass obj2;
obj2.printValue(); // 正确:非常量对象可以调用常量成员函数
obj2.setValue(10); // 正确:非常量对象可以调用非常量成员函数
return 0;
}
5.注意事项
(1)如果成员函数逻辑上不会修改对象状态,应该将其声明为const,这样可以提高代码的安全性和可读性。
(2)如果需要在常量成员函数中修改某些成员变量,可以将这些变量声明为mutable。例如
class MyClass {
public:
mutable int counter; // 可以在常量成员函数中修改
void increment() const {
counter++; // 正确:counter 是 mutable 的
}
};
通过使用const修饰符,可以更好的表达设计意图,帮助编译器检查代码的正确性。
如有错误,敬请指正!!!