Static_cast – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Static_cast – C / C++ – Fórum – Programujte.comStatic_cast – C / C++ – Fórum – Programujte.com

 

Martin Kozibrátka0
Stálý člen
30. 3. 2013   #1
-
0
-

Zdravim, dost často používám dynamic_cast, je to velmi užitečný nástroj. Co mi ale není moc jasné je jeho bratr static_cast.

Kde tento operátor hlavně využíváte vy? 

Je mi jasné, že například zde by se hodil kvůli bezpečnosti:

class CBase {};
class CDerived: public CBase {};
CBase * a = new CBase;
CDerived * b = static_cast<CDerived*>(a);

ale má cenu ho používat například pro:

double d=3.14159265;
int i = static_cast<int>(d);

?

Jaké má vlastně navíc výhody oproti klasickému explicitnímu přetypování? Díky

Nahlásit jako SPAM
IP: 88.83.169.–
Savana.cz - neomezený webhosting za pár kaček :)
crazy
~ Moderátor
+10
Grafoman
30. 3. 2013   #2
-
0
-
Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Martin Kozibrátka0
Stálý člen
31. 3. 2013   #3
-
0
-

Dík z toho je jasný k čemu je dobrý ohledně ukazatelů či referencí(pouze statická kontrola).

Má cenu ho ale používat například zde?

double d=3.14159265;
int i = static_cast<int>(d);

Prostě mi přjide jednodušší to udělat po stylu C:

double d=3.14159265;
int i = (int) d;

U primitivních datových členů mi prostě účelnost uniká

Nahlásit jako SPAM
IP: 88.83.169.–
Savana.cz - neomezený webhosting za pár kaček :)
vitamin+8
Grafoman
31. 3. 2013   #4
-
0
-

#3 Martin Kozibrátka
V tom linku od crazy-ho to mas pekne vysvetlene, ale skratene:

  1. const_cast sluzi na odstranenie konstantnosti objektu.
  2. static_cast sluzi na pouzitie znamej konverzie (cize integer -> real a opacne, pripadne zavolanie uzivatelom definovanu funkciu na pretypovanie, akonahle sa pretypovavaju pointre tak kompilator kontroluje ci to dava "zmysel", cize napr pretypovanie nadradenej triedy na jej potomka, pripadne na void* ...)
  3. reinterpret_cast sluzi na pretypovanie pointrov bez kontroly typov, cize kludne mozes pretypovat int* na double*, pripadne mozes pretypovat integer na adresu MojaTriea*
  4. dynamic_cast je najzlozitejsi(a najpomalsi), vyuziva na pretypovanie RTTI. Je mozne pretypovat bazovu triedu na triedu ktora ju dedi. Caste pouzivanie dynamic_cast-u vecsinou znamena ze mas zly navrh programu

C pretpovanie kombinuje prve 3 pretypovania.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 122 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý