mutable
Főnév
mutable (tsz. mutables)
- (informatika) A
mutable
kulcsszó C++-ban arra szolgál, hogy lehetővé tegye egy adattag módosítását akkor is, ha az osztály példányaconst
objektumként van deklarálva. Ez különösen hasznos, ha egy cache értéket, naplózási információt vagy egyéb módosítható állapotot akarunk kezelni egy egyébként változatlan objektumban.
1. Alapvető mutable
példa
#include <iostream>
class Auto {
private:
mutable int futottKm; // Ez változtatható akkor is, ha az objektum const
public:
Auto() : futottKm(0) {}
void novelKilometer() const {
futottKm++; // `mutable` miatt ez megengedett
}
int getKilometer() const {
return futottKm;
}
};
int main() {
const Auto a; // `const` objektumot hozunk létre
a.novelKilometer(); // Működik, mert `futottKm` mutable
std::cout << "Futott km: " << a.getKilometer() << std::endl;
return 0;
}
🔹 Mi történik itt? - Az Auto
osztályban a futottKm
változó mutable
, ezért akkor is módosítható, ha az osztály példánya const
. - A novelKilometer()
függvény const
, de mégis tudja módosítani a mutable
adattagot.
2. mutable
használata lambdákkal
A mutable
a C++ lambda kifejezésekben is használható! Normál esetben egy lambda érték szerint befogott változókat nem módosíthatja ([=]
), de a mutable
kulcsszóval ezt engedélyezhetjük.
Példa lambda mutable
használatára
#include <iostream>
int main() {
int x = 10;
auto lambda = [x]() mutable {
x++; // `mutable` nélkül ez nem engedélyezett
std::cout << "Lambda x: " << x << std::endl;
};
lambda(); // Kiírja: Lambda x: 11
std::cout << "Eredeti x: " << x << std::endl; // x változatlan marad: 10
return 0;
}
🔹 Fontos tudni: - A mutable
nélkül a lambda nem tudná módosítani a befogott x
értéket. - A mutable
csak a lambda belső másolatát módosítja, nem a külső változót.
3. Mikor használjuk a mutable
kulcsszót?
✅ Használjuk, ha:
✔ Egy const
osztálymetódusnak naplóznia kell az adatokat.
✔ Egy const
objektumban gyorsítótárazott (cache) adatokat akarunk frissíteni.
✔ Egy lambdában egy érték szerint befogott változót akarunk módosítani.
🚫 Ne használjuk, ha:
❌ Az adattagnak valójában változatlannak kellene maradnia.
❌ Ha a const
objektum módosítása logikailag hibás lenne.
4. Összegzés
- A
mutable
kulcsszó lehetővé teszi egy adattag módosítását akkor is, ha az objektumconst
. - Elsősorban cache-elt értékek, naplózási információk vagy számlálók esetében használatos.
- Lambda kifejezéseknél lehetővé teszi az érték szerint befogott változók módosítását.
- Ne használjuk indokolatlanul, mert megkerüli a
const
által nyújtott biztonságot.