Možné duplikáty: [Význam “const” last v deklarácii metódy C++?] (https://stackoverflow.com/questions/751681/meaning-of-const-last-in-a-c-method-declaration)
Dostala sa mi do rúk kniha, kde je napísané niečo ako:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
Čo to znamená?
Funkcia "const", označená kľúčovým slovom const
za deklaráciou funkcie, spôsobí, že funkcia tejto triedy zmení členskú premennú triedy, čo je chybou kompilátora. Čítanie premenných triedy vo vnútri funkcie je však v poriadku, ale zápis vo vnútri tejto funkcie vygeneruje chybu kompilátora.
Iný spôsob uvažovania o takejto "const funkcii" je pohľad na funkciu triedy ako na normálnu funkciu, ktorá preberá implicitný ukazovateľ this
. Takže metóda int Foo::Bar(int random_arg)
(bez const na konci) vedie k funkcii ako int Foo_Bar(Foo* this, int random_arg)
a volanie ako Foo f; f.Bar(4)
bude vnútorne zodpovedať niečomu ako Foo f; Foo_Bar(&f, 4)
. Pridanie const na koniec (int Foo::Bar(int random_arg) const
) potom možno chápať ako deklaráciu s ukazovateľom const this: int Foo_Bar(const Foo* this, int random_arg)
. Keďže typ this
je v takomto prípade const, nie sú možné žiadne modifikácie členských premenných.
Je možné uvoľniť obmedzenie "const funkcie", ktoré spočíva v tom, že funkcia nesmie zapisovať do žiadnej premennej triedy. Aby bolo možné do niektorých premenných zapisovať, aj keď je funkcia označená ako "const function", tieto premenné triedy sa označujú kľúčovým slovom mutable
. Ak je teda premenná triedy označená ako mutovateľná a "const function" do tejto premennej zapisuje, potom sa kód skompiluje čisto a premennú je možné meniť. (C++11)
Ako zvyčajne pri práci s kľúčovým slovom const
, zmena umiestnenia kľúčového slova const vo výroku jazyka C++ má úplne iný význam. Uvedené použitie const
platí len pri pridaní const
na koniec deklarácie funkcie za zátvorku.
const
je v C++ veľmi často používaný kvalifikátor: syntax a usporiadanie v kombinácii s ukazovateľmi často nie sú jednoduché. Niekoľko výkladov o správnosti const
a kľúčovom slove const
:
The C++ 'const' Declaration: Why & How] Deklarácia C++: Prečo & Ako.
Podobne ako táto otázka.
V podstate to znamená, že metóda Bar
nebude modifikovať ne mutovateľné členské premenné Foo
.