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은 현재 어떤 타입의 객체를 보관하고 있는지 알 수 없다.