728x90
18. C++의 형변환
C++에서 형변환(타입 캐스팅)은 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정
1. 암시적 형변환 (Implicit Conversion)
암시적 형변환은 C++ 컴파일러가 자동으로 수행하는 형변환입니다. 예를 들어, 정수형 변수를 실수형 변수에 할당할 때 자동으로 변환
2. 명시적 형변환 (Explicit Conversion)
명시적 형변환은 프로그래머가 의도적으로 형변환을 수행하는 방법입니다. C++에서는 여러 가지 방법으로 명시적 형변환을 수행
2.1. C 스타일 캐스팅
가장 기본적인 형변환 방법으로, (타입)을 사용하여 변환
double doubleValue = 5.5;
int intValue = (int)doubleValue; // double -> int로 변환
2.2. static_cast
static_cast는 안전한 형변환을 위해 제공되는 연산자입니다. 기본 데이터 타입 간의 변환이나 클래스 계층에서의 형변환에 사용
double doubleValue = 5.5;
int intValue = static_cast<int>(doubleValue); // double -> int로 변환
2.3. dynamic_cast
dynamic_cast는 주로 다형성을 사용하는 클래스 계층에서 안전한 형변환을 제공하는 연산자입니다. 런타임에 타입 체크를 수행하며, 주로 포인터나 참조를 사용할 때 사용
class Base {
public:
virtual ~Base() {} // 가상 소멸자 필요
};
class Derived : public Base {};
Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); // 안전한 다운캐스팅
if (derivedPtr) {
// 변환 성공
}
2.4. const_cast
const_cast는 const나 volatile 속성을 제거하는 데 사용됩니다. 이 연산자는 주로 함수 인자에서 const 속성을 제거해야 할 때 사용
const int constValue = 10;
int* ptr = const_cast<int*>(&constValue); // const 속성 제거
2.5. reinterpret_cast
reinterpret_cast는 포인터나 참조의 비트 패턴을 직접적으로 변환합니다. 이 방법은 매우 위험할 수 있으며, 주의해서 사용해야 합니다.
int* intPtr = new int(10);
char* charPtr = reinterpret_cast<char*>(intPtr); // int* -> char*
C++에서 형변환은 여러 방법으로 수행할 수 있으며, 각 방법은 특정한 용도와 안전성을 가지고 있다.
- 암시적 형변환은 자동으로 이루어지며, 타입 간의 호환성이 있을 때 사용됩니다.
- 명시적 형변환은 프로그래머가 지정해야 하며, static_cast, dynamic_cast, const_cast, reinterpret_cast 등의 연산자를 사용하여 수행
- 암시적 형변환: 컴파일러가 자동으로 수행하는 형변환.
- 명시적 형변환: 프로그래머가 의도적으로 수행하는 형변환.
- C 스타일 캐스팅
- static_cast
- dynamic_cast
- const_cast
- reinterpret_cast
728x90
'반도체 > C++' 카테고리의 다른 글
19. C++의 객체지향 4가지 (0) | 2024.07.31 |
---|---|
18. C++의 형변환 (2) 안정성 (79) | 2024.07.29 |
17. C++의 템플릿 (1) | 2024.07.29 |
16. 두 수의 합을 반환하는 함수 (1) | 2024.07.26 |
15.값을 반환하는 함수 VS 값을 반환하지 않는 함수 (1) | 2024.07.26 |