const-correctness
Főnév
const-correctness (tsz. const-correctnesses)
- (informatika) A const-correctness (konzisztens
consthasználat) a C++ nyelv egyik kulcsfontosságú koncepciója, amely segít abban, hogy a program kódja biztonságosabb, átláthatóbb és optimalizálhatóbb legyen. Aconstkulcsszó használatával deklaráljuk, hogy valami nem változhat meg – és ezt a fordító szigorúan ellenőrzi.
Az alábbiakban részletesen elmagyarázom a const-correctness fogalmát, gyakorlati példákkal:
🧠 Mi az a const-correctness?
A const-correctness azt jelenti, hogy mindig megadjuk, ha egy érték, pointer, referencia vagy tagfüggvény nem változtatja meg az állapotát vagy más objektumot.
Ez:
- növeli a kód megbízhatóságát (a fordító hibát jelez, ha megszegnéd a szabályt),
- könnyíti a hibakeresést (látszik, mit változtatsz meg és mit nem),
- segíti a kód dokumentálását.
🧩 Alkalmazási területek
1. Const lokális változó
const int a = 5;
a = 6; // HIBA: nem módosítható
2. Const pointerek
Különbséget kell tenni a mutatott érték és maga a pointer között:
a) Nem változtatható, amit mutat:
const int* p = &a; // pointer to const
*p = 10; // HIBA: nem módosítható, amit mutat
b) Nem változtatható a pointer (de az érték igen):
int* const p = &a; // const pointer
*p = 10; // OK
p = &b; // HIBA
c) Mindkettő const:
const int* const p = &a;
📦 Const referencia (const &)
Használjuk, ha egy nagy objektumot paraméterként adunk át, és nem akarjuk módosítani:
void kiir(const std::string& szoveg) {
std::cout << szoveg << "\n";
}
Ezzel:
- elkerüljük a másolást,
- biztosítjuk, hogy
szovegnem változik meg.
🧩 Const tagfüggvények (class/struct)
class Pont {
int x, y;
public:
Pont(int x_, int y_) : x(x_), y(y_) {}
int getX() const { return x; } // nem módosítja az objektumot
void setX(int x_) { x = x_; } // ez viszont igen
};
❗
getX()nem változtathatja meg a tagváltozókat. Ha mégis próbálja, fordítási hiba lesz.
🧠 Const objektumok és azok hívásai
const Pont p(1,2);
p.getX(); // OK
p.setX(5); // HIBA: nem hívható nem-const tagfüggvény const objektumra
⚙️ Const return típus
const int getVal() {
return 5;
}
Ez általában nem sokat ér, mert visszatérési érték másolat, így nem lehet módosítani akkor sem, ha nem const. Akkor van értelme, ha referenciát vagy pointert adsz vissza:
const std::string& getNév() const {
return név;
}
Ez megakadályozza, hogy a hívó módosítsa a belső objektum állapotát.
🚫 Const_cast – konverzió const eltávolítására
const int a = 10;
int* b = const_cast<int*>(&a);
*b = 20; // UNDEFINED BEHAVIOR, veszélyes!
Soha ne használd, kivéve speciális, haladó esetekben.
✅ Jó gyakorlatok
- Minden, amit nem akarsz módosítani, legyen
const. - Paramétereknél mindig használd a
const T&formátumot nagy objektumokra. - Tagfüggvényeknél mindig jelezd a
conststátuszt, ha nem módosít. - A
constnemcsak védelem, hanem dokumentáció is.
🧪 Példa: const helyes és helytelen használata
class Szam {
int ertek;
public:
Szam(int e) : ertek(e) {}
int get() const { return ertek; } // helyes
void set(int e) { ertek = e; }
void hibas() const {
ertek = 0; // HIBA: const tagfüggvény nem módosíthat
}
};
🧠 Összefoglalás
Mit jelent a const? |
Hol használjuk? |
|---|---|
| Nem változtatható | Lokális változók, pointerek, referenciák |
| Biztonságos kód | Függvényparaméterek, visszatérések |
| Dokumentálja a szándékot | Tagfüggvények, class metódusok |
| Fordítóval ellenőrizteti a szándékot | Objektumok védelme, API stabilitás |
- const-correctness - Szótár.net (en-hu)
- const-correctness - Sztaki (en-hu)
- const-correctness - Merriam–Webster
- const-correctness - Cambridge
- const-correctness - WordNet
- const-correctness - Яндекс (en-ru)
- const-correctness - Google (en-hu)
- const-correctness - Wikidata
- const-correctness - Wikipédia (angol)