Ключевое слово 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
полезно в случаях, когда необходимо изменить внутреннее состояние объекта, логически оставаясь неизменным.