C++ casts
c++μλ λ€μν ν λ³ν μ°μ°μ(λλ μΊμ€νΈ μ°μ°μ)κ° μλ€.
- static_cast
- reinterpret_cast
- dynamic_cast
- const_cast
μμ κ°μ΄ ν¬κ² 4κ°μ§μ castλ€μ΄ μ‘΄μ¬νλ€.
static_cast
κ°μ₯ μΌλ°μ μΈ ν λ³ν μ°μ°μλ‘, μ»΄νμΌ μκ°μ μμ ν ν λ³νμ μνν©λλ€. μ»΄νμΌλ¬κ° νμ κ²μ¬λ₯Ό μννλ©°, μμ νμ§ μμ ν λ³νμ λ°©μ§ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μμ€μ μ€μΌ μ μμ΅λλ€.
#include <iostream>
int main() {
double d = 3.14;
int i = static_cast<int>(d); // doubleμ intλ‘ λ³ν
std::cout << "i : " << i;
return (0);
}
// output
// i : 3%
reinterpret_cast
μ£Όλ‘ μ£Όμλ ν¬μΈν° λ±μ λ€λ₯Έ νμμΌλ‘ λ³νν λ μ¬μ©λλ€.
#include <iostream>
int main() {
int x = 42;
double* y = reinterpret_cast<double*>(&x); // int μ£Όμλ₯Ό double ν¬μΈν°λ‘ λ³ν
int z = x;
std::cout << "z : " << z;
return (0);
}
// output
// z : 42
dynamic_cast
μ£Όλ‘ μμ κ΄κ³κ° μλ ν΄λμ€μμ μ¬μ©λλ©°, μ£Όλ‘ λ€νμ±(polymorphism)κ³Ό ν¨κ» μ¬μ©λλ cast
Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
// μ±κ³΅μ μΌλ‘ ν λ³ν
}
const_cast
const νμ μλ₯Ό μ κ±°νκ±°λ μΆκ°νλ λ° μ¬μ©
const int x = 42;
int* y = const_cast<int*>(&x); // constλ₯Ό μ κ±°νμ¬ μμ κ°λ₯ν ν¬μΈν°λ‘ λ³ν
'42seoul > projects' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[C++] templates (0) | 2024.03.13 |
---|---|
[CPP Module] 06 (0) | 2024.03.13 |
[CPP Module] 05 (0) | 2024.03.13 |
[C++] Repetition and Exceptions (0) | 2024.03.13 |
[C++] interfaces ( μΈν°νμ΄μ€ ) (0) | 2023.09.13 |