1. 암시적 형변환


C에서는 void 포인터를 다른 포인터로 넣거나, 다른 포인터에 void 포인터를 넣는 것이 컴파일 에러 없이 암시적 형변환 된다.

아래 코드는 C에서는 문제없이 컴파일 된다.



단 C++에서는 위의 코드가 컴파일 되지 않는다. 


2. 명시적 형변환


C에서는 (자료형) 으로 대부분의 형변환이 성공한다. 아래처럼 메모리 크기가 다른 자료형에 대해서도 형변환이 성공하고, 이는 버그를 유발할 수 있다.



따라서 C++은 용도에 따라 cast 명령을 나눴다.


static_cast

: 컴파일 시점에 연관성이 있는 형끼리만 변환시킨다.


dynamic_cast

: 실행시간에 타입을 확인하여 캐스팅을 수행한다. RTTI 기술을 사용하는데, 클래스 상속이 이루어지는 경우 컴파일 시간에 타입을 알 수 없기에 사용한다.


const_cast

: 상수성을 제거할 때 사용한다.


reinterpret_cast

: C의 형변환과 동일한 것으로 되도록 사용하지 않는 것이 좋다.

+ Recent posts