2023. 2. 9. 13:01ㆍProgramming/JAVA, C++, Go, Rust
- 목차
static_cast
static_cast는 C의 기본 cast와 동일합니다. 그렇다면 왜 static_cast를 사용해야 할까요? C의 기본 cast는 data type의 bit width를 무시합니다. 즉, 더 많은 bit를 사용하는 변수에서 더 적은 bit를 사용하는 변수로 casting을 하게되면 부족한 bit에 대한 값을 잃게되는 narrowing 문제가 발생합니다. C++의 static_cast를 사용하게되면 이런 문제를 예방 (compile 단계에서 오류 발생) 할 수 있습니다.
static_cast는 다음과 같이 사용할 수 있습니다.
std::shared_ptr<int> sp(static_cast<int *>(malloc(sizeof(int))), free);
reinterpret_cast
type을 변환하는 cast를 지원합니다. 전혀 다른 타입으로 변환을 허용하는 cast 이기에 사실 사용을 하면 안되는 cast중 하나 입니다.
struct Item {
int value;
int type;
};
Item item = {1, 2};
int intval = reinterpret_cast<int>(item);
위와같은 casting을 허용합니다. legacy C 코드와 연동 기능을 구현할 때 void *로 임시로 변환하는 등의 경우에 사용할 수는 있겠습니다. 컴파일러마다 동작이 다르기에 이 역시 사용을 안하는 것이 좋습니다.
dynamic_cast
객체의 down casting을 위해서 사용합니다. 즉, base class가 아닌 derived class로 변환하고자 할 때 사용합니다.
class Base {
...
};
class Derived1: public Base {
...
};
Base *base = new Derived1;
Derived1 *derived1_ptr = dynamic_cast<Derived1 *>(base);
cast에 실패할 경우 nuil pointer를 반환합니다.
const_cast
const_cast는 const 성 즉, 상수 변수를 상수가 아닌 변수로 casting 할 때 사용합니다. 또한 volatile의 속성도 제거하는데 사용됩니다.
const int value = 1;
int value2 = const_cast<int>(value);
'Programming > JAVA, C++, Go, Rust' 카테고리의 다른 글
Kotlin build on Mac (0) | 2023.02.27 |
---|---|
C++ inline variable (0) | 2023.02.09 |
C++ emplace_back (0) | 2023.02.03 |
C++ 대입연산자의 virtual 사용 (0) | 2023.01.29 |
미래지향적인 C++ 프로그래밍 (0) | 2023.01.29 |