Константные методы и объекты
Как работают константные методы?
В const-методе this указывает на const-объект, поэтому через него нельзя менять обычные поля и вызывать неконстантные методы. Однако mutable-поля и объекты, доступные через хранимые указатели, могут изменяться. const не гарантирует глубокую неизменяемость или потокобезопасность.
Пример:
class MyClass {
public:
int getValue() const { // Константный метод
return value;
}
void setValue(int val) {
value = val;
}
private:
int value = 0;
};
int main() {
const MyClass obj; // Константный объект
int val = obj.getValue(); // Можно вызывать константный метод
// obj.setValue(10); // Ошибка: нельзя вызывать неконстантный метод для константного объекта
}
Основные характеристики:
-
Не могут изменять данные-члены объекта: Константные методы не могут изменять данные-члены класса (исключение составляют данные, объявленные как
mutable). -
Могут вызываться для константных объектов: Константные методы могут вызываться как для обычных, так и для константных объектов.
Это помогает обеспечить безопасность и защиту данных, предотвращая случайные изменения состояния объекта.