본문 바로가기
카테고리 없음

C++ 형 변환 방법 (+const_cast)

by NickNameInfo1 2024. 6. 23.
반응형

1. (int)value 방식

이 방식은 C 스타일의 캐스팅으로, C++에서도 여전히 지원되지만 C++ 스타일의 캐스팅(static_cast, dynamic_cast 등)을 사용하는 것이 권장됩니다. 이 방식은 다음과 같은 특징을 가집니다:

  • 문법적으로 간단: (type)value 형태로 사용되며, 가독성이 좋습니다.
  • 컴파일러가 경고를 발생시키지 않음: 대부분의 경우 컴파일러는 이 방식을 사용할 때 경고를 발생시키지 않습니다.
  • 타입 변환의 범위가 넓음: C++에서는 int와 같은 기본 데이터 형식 간의 변환이나 상속 관계가 없는 클래스의 포인터 간의 변환에 사용됩니다.
  • C 스타일 캐스팅: (int)value는 C 스타일의 형 변환 방식으로, 오래된 C 스타일에서 사용되던 방식입니다.
  • 타입 체크 없음: 컴파일러는 value가 실제로 int로 변환 가능한지 여부를 체크하지 않습니다. 따라서 불필요하거나 위험할 수 있는 형 변환도 가능합니다.
  • 다양한 변환 지원: C 스타일 캐스팅은 기본적으로 모든 형태의 형 변환을 지원합니다. 즉, 서로 호환되지 않는 자료형도 강제로 변환할 수 있습니다.
float f = 3.14;
int i = (int)f; // C 스타일 캐스팅, 소수 부분이 잘려서 int로 변환됨

 

2. static_cast <int>(value) 방식

이 방식은 C++에서 const 한정자를 제거할 때 사용하는 캐스팅 연산자입니다. 이 방식은 다음과 같은 특징을 가집니다:

  • 타입 안전성 보장: static_cast는 컴파일 시간에 타입의 안전성을 보장하면서 형 변환을 수행합니다. 컴파일러가 변환 가능 여부를 검사하며, 안전하지 않은 변환을 막아줍니다.
  • 명시적인 변환: 코드의 가독성을 높이고 형 변환의 의도를 명확히 할 수 있습니다.
  • 제한된 형태의 변환: static_cast는 기본적으로 안전한 형 변환만을 허용합니다. 상속 관계에서의 업캐스팅이나 기본 형식들 간의 변환 등을 지원합니다.
double d = 3.14;
int i = static_cast<int>(d); // static_cast 사용, 소수 부분이 잘려서 int로 변환됨

 

반응형