Перейти к содержимому

Ключевое слово mutable

Введение

Ключевое слово mutable в C++ позволяет изменять члены данных класса даже внутри методов, объявленных как const. Это полезно, когда необходимо изменить состояние объекта, который логически остается неизменным.

Использование mutable

Определение и назначение

Ключевое слово mutable используется перед объявлением члена данных класса. Это снимает ограничения на изменение члена данных внутри const методов.

Синтаксис

class MyClass {
mutable int counter;
public:
void increment() const {
counter++;
}
};

Пример использования

#include <iostream>
class MyClass {
public:
mutable int counter;
MyClass() : counter(0) {}
void increment() const {
counter++;
}
void display() const {
std::cout << "Counter: " << counter << std::endl;
}
};
int main() {
const MyClass obj;
obj.increment();
obj.display(); // вывод: Counter: 1
}

В этом примере counter объявлен как mutable, что позволяет изменять его значение в методе increment, который объявлен как const.

Применение mutable в лямбдах

Определение и назначение

В лямбдах ключевое слово mutable позволяет изменять захваченные переменные по значению. По умолчанию лямбды захватывают переменные как const.

Синтаксис

auto lambda = [=]() mutable {
// Изменение захваченных переменных
};

Пример использования

#include <iostream>
int main() {
int x = 10;
auto lambda = [x]() mutable {
x++;
std::cout << "Inside lambda: " << x << std::endl;
};
lambda(); // вывод: Inside lambda: 11
std::cout << "Outside lambda: " << x << std::endl; // вывод: Outside lambda: 10
}

В этом примере лямбда-функция захватывает переменную x по значению и изменяет ее внутри тела лямбды, что становится возможным благодаря ключевому слову mutable.

Резюме

  • Ключевое слово mutable позволяет изменять члены данных класса внутри const методов.
  • Оно также позволяет изменять захваченные переменные по значению в лямбдах.
  • Использование mutable полезно в случаях, когда необходимо изменить внутреннее состояние объекта, логически оставаясь неизменным.