1.不能在常量成员函数内部调用非常量成员函数
在常量成员函数(const member function)内部,你不能修改类的成员变量或调用其他非常量成员函数,因为这些操作可能会改变类的状态。这有助于确保常量成员函数的行为符合预期,不会意外地修改类的状态。以下是一个简单的示例,说明在常量成员函数内部不能修改成员变量或调用非常量成员函数:
class MyClass {
public:
MyClass(int val) : value(val) {}
void setValue(int val) {
value = val;
}
void printValue() const {
// value = 42; // 错误:不能在常量成员函数内部修改成员变量
// setValue(42); // 错误:不能在常量成员函数内部调用非常量成员函数
std::cout << "The value is: " << value << std::endl;
}
private:
int value;
};
在这个例子中,printValue()
函数被声明为常量成员函数。在printValue()
函数内部,我们不能对成员变量value
进行赋值,也不能调用非常量成员函数setValue()
,因为这些操作可能会改变类的状态。如果尝试执行这些操作,编译器将报错。通过将成员函数声明为常量成员函数,你可以明确地表明这个函数不会修改类的状态,从而提高代码的安全性和可维护性。