형변환, c++11기타
포스트
취소

형변환, c++11기타

C++ 기존 형변환 Cast에는 어떤 것들이 있나?

  • static_cast 가장 기본적인 캐스팅. C 스타일 캐스팅과 다를 바 없어 보이나 형변환이 불가능한 타입으로 캐스팅 시에는 컴파일 단에서 에러를 발생시킨다. 번거롭더라도 C스타일의 캐스팅은 지양하고, 기본적으로 static_cast를 사용하는 것이 좋다.

  • dynamic cast 상속 구조에서 안전한 다운캐스팅을 지원한다. 유효하지 않은 캐스팅일 경우에는 nullptr을 반환한다. 런타임 비용이 크기 때문에 일반적으로 추천되지 않는다. 부모-> 자식 관계를 명확하게 알고 static_cast를 사용하는 것이 더 바람직하다.

  • const cast 상수성을 없애는 캐스트.

  • reinterpret_cast 임의의 포인터끼리의 변환을 허용한다. 또한 정수형을 포인터로 변환하여 준다. 사용시 각별한 주의가 필요하다.

RTTI는 무엇인가?

Run Time Type information의 약자이다. 런타임 도중 실제 타입의 정보를 얻어오는데 사용된다. dynamic_cast가 해당 기술을 이용해 내부적으로 구현되고 있다고 한다.

  • 가상 테이블이란 무엇인가? 최대한 자세히 설명하라. 상속 구조에서 가상함수 정의된 클래스가 만들어져 있다면 가상함수 테이블이 생성된다.

  • NULL과 nullptr의 차이는? NULL은 define 된 값으로서 그 정의를 따라가보면 0으로 체크되어있다. 따라서 포인터값만을 비교하기 위한 것이 아닌 정수값으로도 비교가 가능하다. 반면 nullptr은 포인터 타입의 좀더 정확한 체크를 위해 c++11부터 도입된 타입으로서 포인터 타입이 아닌 다른곳에 비교했을땐 컴파일 에러가 난다. 기본적으로 포인터 체크를 위해선 nullptr을 사용하는 것이 좋다.

  • varient에 대해 설명하라. 컴파일 타임에 정해진 여러가지 객체 중에 하나의 타입을 보관할 수 있는 클래스이다. 공용체(union)과 비슷하지만 union은 현재 어떤 타입의 객체를 보관하고 있는지 알 수 없다. varient_1

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
바로가기