- static_cast
static_cast๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ ์บ์คํ
์ด๋ค. ์ปดํ์ผ ์๊ฐ์ ํ์
๋ณํ์ ์ํํ๋ฉฐ, ์ปดํ์ผ๋ฌ๊ฐ ํ์
์์ ์ฑ์ ์ด๋ ์ ๋ ๋ณด์ฅํด ์ค๋ค. ์ฃผ๋ก ๊ธฐ๋ณธ ํ์
๊ฐ์ ๋ณํ, ๋ช
์์ ์์ฑ์๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ์์ฑ, ์์ ๊ด๊ณ์ ์๋ ํด๋์ค ๊ฐ์ ๋ณํ ๋ฑ์ ์ฌ์ฉ๋๋ค.
Copy code
int a = 10;
double b = static_cast<double>(a); // int๋ฅผ double๋ก ๋ณํ
- 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์ด ์ ํจํ ํฌ์ธํฐ๊ฐ ๋๋ค
- const_cast
const_cast๋ ๋ณ์์ const ๋๋ volatile ์์ฑ์ ์ ๊ฑฐํ๊ฑฐ๋ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋๋ค. ์ฃผ๋ก ๊ธฐ์กด์ const ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ์์ ํ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค. ๋น์ ํ์๋ฉด, const_cast๋ ์ฑ
์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋์๋ค๊ฐ ๋ค์ ์์ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค.
Copy code
const int a = 10;
int* b = const_cast<int*>(&a); // const๋ฅผ ์ ๊ฑฐํ์ฌ a๋ฅผ ์์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค
- reinterpret_cast
reinterpret_cast๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ์ํํ ํํ์ ์บ์คํ
์ด๋ค. ํฌ์ธํฐ๋ ๋ฐ์ดํฐ์ ๋นํธ ํจํด์ ๋จ์ํ ๋ค๋ฅธ ํ์
์ผ๋ก ํด์ํ๋ค. ์ฃผ๋ก ํฌ์ธํฐ ํ์
๊ฐ์ ๋ณํ์ด๋ ๋นํธ ํจํด์ ๊ทธ๋๋ก ์ ์งํ ์ฑ ๋ค๋ฅธ ํ์
์ผ๋ก ํด์ํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
Copy code
int a = 65;
char* b = reinterpret_cast<char*>(&a); // int ํฌ์ธํฐ๋ฅผ char ํฌ์ธํฐ๋ก ๋ณํ