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