C++ ban, egy osztály egyik tagfüggvényének ellátása a const utószóval, mit eredményez?
Pl:
Tort::Kiir(ostream& s) const
{...}
Azt, hogy konstans objektumon is meg lehet hívni.
Tehát.
const Tort x;
// na EZ nem fordulna le, ha a Kiir nem lenne const
x.Kiir(cout);
Kis elmélet mögé. Minden C++ osztály metódusának van egy rejtett this paramétere, ami arra az objektumra mutat, amin meghívtad a függvényt. Ha const objektumon hívsz meg egy függvényt, ami nem const, akkor egy const objektumra mutató nem-const thised lenne, ami fordítási hibát okoz, nem tudsz const this-ből (ami a konstans objektumod címe) nem-const this-t csinálni (ami a függvény paramétere lenne), C++ nem engedi a const -> nem-const konverziót.
És nem lehet ez úgy is konvertálni, hogy
const_cast<tort>(*this)?
const_cast<Tort*>(this)
De lehet, csak nem szép. És ráadásul csak akkor garantált a hibamentes működés, ha az objektum amire mutat a this nem konstans igazából, csak mondjuk függvényparaméterben const&-ként (konstans referencia) lett átadva. Ha a változó eredetileg is const, akkor ez bizony undefined behavior, ha módosítasz rajta valamit a hekkelt this-en keresztül.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!