De ce nevoia de static_cast, cum funcționează și în cazul în care acesta este utilizat stivă overflow în limba rusă
Static_cast au o mulțime de aplicații diferite. Ideea lui este după cum urmează: este limitat de stil C, rezistență exprimate. Limitarea este necesară deoarece în stil C, turnat poate provoca ceva la nimic (bine, aproape), și, astfel, se poate ascunde eroarea. De exemplu, s-ar putea zakastit accidental char const * la char *. obtinerea accident pe unele sisteme cu memorie hardware-Const. static_cast acest lucru nu te va lăsa.
Cele mai multe ori atunci când doriți să faceți conversia de tip explicită (și sper că se întâmplă destul de rar), pe care doriți să-l static_cast.
O listă oficială a tot ceea ce poate static_cast. foarte mare. Voi cita numai cele mai importante lucruri pe care el știe cum să (și pe care el nu poate):
- Conversia unui pointer la clasa părinte la un pointer la clasa derivată. obiectului indicator este obligat să fie clasa copilului drept, comportamentul altfel nedefinit. Dacă nu sunteți sigur și doriți să verificați dacă subclasa obiect, utilizați dynamic_cast (este proiectat special pentru acest scop).
- Conversia între tipurile numerice. int. mult timp. char. unsigned int - tot ce pot pentru a arunca reciproc folosind static_cast.
- Zakastit poate fi orice expresie în gol. Rezultatul va fi calculat și aruncat (dar efectele secundare, desigur, să fie executate).
- static_cast constantă nullptr poate duce la orice tip de pointer. De obicei, acest lucru nu este necesar și vă puteți baza pe conversie implicită, dar uneori (de exemplu, pentru a selecta funcția dorită suprasarcina), acest lucru poate veni la îndemână.
- Conversia între indicii în principiu tipuri incompatibile. De exemplu, un pointer la o dublă nu poate duce la un pointer la int. Pentru trucuri în încălcarea de siguranță tip, utilizați reinterpret_cast.
- Pointeri la tipuri, și tipurile de atribute incompatibile const și / sau volatile. Dacă aveți nevoie pentru a rupe Const-corectitudinea, utilizați const_cast.
- Desigur, nu se poate da un pointer la o funcție membru la un pointer la o funcție normală, sau un pointer la un pointer la datele de cod. Pentru a utiliza astfel de hacks murdare reinterpret_cast.
Un alt motiv pentru a utiliza static_cast (precum și alte C ++ - anumite tipuri de conversii) este ușurința de căutare în sursele ca ochii, și instrumente de căutare. castă Sishny (în special varietatea funcțională) este foarte ușor de dor în codul.
Pentru comparație, „obișnuită“ tip de conversie (de tip C exprimate) echivalent cu următoarea secvență:
- const_cast.
- Dacă const_cast nu poate da rezultatul se dorește, static_cast (dar care permite conversia la nedoobyavlennomu tip)
- Dacă este așa, și nu iese, compilatorul încearcă să adauge o coadă la static_cast const_cast.
- Dacă acest lucru nu funcționează, atunci reinterpret_cast.
- . și dacă nu ieși, apoi se adaugă la ea const_cast.