1. static_cast static_cast๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ ์บ์ŠคํŒ…์ด๋‹ค. ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ํƒ€์ž… ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์–ด๋Š ์ •๋„ ๋ณด์žฅํ•ด ์ค€๋‹ค. ์ฃผ๋กœ ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ„์˜ ๋ณ€ํ™˜, ๋ช…์‹œ์  ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ, ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ๋ณ€ํ™˜ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.
Copy code
int a = 10;
double b = static_cast<double>(a); // int๋ฅผ double๋กœ ๋ณ€ํ™˜
  1. dynamic_cast dynamic_cast๋Š” ์ฃผ๋กœ ๋‹คํ˜•์„ฑ(polymorphism)์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๊ณ„์ธต์—์„œ์˜ ํฌ์ธํ„ฐ ๋˜๋Š” ์ฐธ์กฐ ํƒ€์ž… ๋ณ€ํ™˜์— ์‚ฌ์šฉ๋œ๋‹ค. ์‹คํ–‰ ์‹œ๊ฐ„์— ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์•ˆ์ „ํ•œ ํƒ€์ž… ๋ณ€ํ™˜์„ ๋ณด์žฅํ•ด ์ค€๋‹ค. dynamic_cast๋Š” ์ฃผ๋กœ ์ƒ์† ๊ด€๊ณ„์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค ํฌ์ธํ„ฐ๋ฅผ ์ž์‹ ํด๋ž˜์Šค ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ณ€ํ™˜์ด ์‹คํŒจํ•˜๋ฉด nullptr์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. RTTI(Runtime Type Information)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์— ํƒ€์ž… ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋ฏ€๋กœ, dynamic_cast๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๊ฐ€์ƒ ํ•จ์ˆ˜(virtual function)๊ฐ€ ์ •์˜๋œ ํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค.
Copy code
class Base { virtual void foo() {} };
class Derived : public Base { void foo() override {} };

Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); // ์„ฑ๊ณตํ•˜๋ฉด derivedPtr์ด ์œ ํšจํ•œ ํฌ์ธํ„ฐ๊ฐ€ ๋œ๋‹ค
  1. const_cast const_cast๋Š” ๋ณ€์ˆ˜์˜ const ๋˜๋Š” volatile ์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ฃผ๋กœ ๊ธฐ์กด์˜ const ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋น„์œ ํ•˜์ž๋ฉด, const_cast๋Š” ์ฑ…์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋‘์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.
Copy code
const int a = 10;
int* b = const_cast<int*>(&a); // const๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ a๋ฅผ ์ˆ˜์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค
  1. reinterpret_cast reinterpret_cast๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ„ํ—˜ํ•œ ํ˜•ํƒœ์˜ ์บ์ŠคํŒ…์ด๋‹ค. ํฌ์ธํ„ฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ๋น„ํŠธ ํŒจํ„ด์„ ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ํ•ด์„ํ•œ๋‹ค. ์ฃผ๋กœ ํฌ์ธํ„ฐ ํƒ€์ž… ๊ฐ„์˜ ๋ณ€ํ™˜์ด๋‚˜ ๋น„ํŠธ ํŒจํ„ด์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ํ•ด์„ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
Copy code
int a = 65;
char* b = reinterpret_cast<char*>(&a); // int ํฌ์ธํ„ฐ๋ฅผ char ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜