C++中的常量成員函數(const member function)不能修改對象的狀態,即它們不能修改對象的任何非靜態成員變量
常量成員函數可以調用其他非常量成員函數,但不能通過this指針修改對象的狀態。如果嘗試這樣做,編譯器將報錯。
以下是一個簡單的示例:
#include <iostream>
class MyClass {
public:
MyClass(int value) : value_(value) {}
// 非常量成員函數,可以修改對象的狀態
void setValue(int value) {
value_ = value;
}
// 常量成員函數,不能修改對象的狀態
int getValue() const {
return value_;
}
private:
int value_;
};
int main() {
MyClass obj(10);
// 調用非常量成員函數,可以修改對象的狀態
obj.setValue(20);
std::cout << "Value: " << obj.getValue() << std::endl; // 輸出 "Value: 20"
// 嘗試調用常量成員函數來修改對象的狀態,將導致編譯錯誤
// obj.getValue() = 30;
return 0;
}
在這個示例中,getValue()
是一個常量成員函數,它不能修改對象的狀態(即不能修改value_
變量)。而setValue()
是一個非常量成員函數,它可以修改對象的狀態。