1. 암시적 형변환
C에서는 void 포인터를 다른 포인터로 넣거나, 다른 포인터에 void 포인터를 넣는 것이 컴파일 에러 없이 암시적 형변환 된다.
아래 코드는 C에서는 문제없이 컴파일 된다.
단 C++에서는 위의 코드가 컴파일 되지 않는다.
2. 명시적 형변환
C에서는 (자료형) 으로 대부분의 형변환이 성공한다. 아래처럼 메모리 크기가 다른 자료형에 대해서도 형변환이 성공하고, 이는 버그를 유발할 수 있다.
따라서 C++은 용도에 따라 cast 명령을 나눴다.
static_cast
: 컴파일 시점에 연관성이 있는 형끼리만 변환시킨다.
dynamic_cast
: 실행시간에 타입을 확인하여 캐스팅을 수행한다. RTTI 기술을 사용하는데, 클래스 상속이 이루어지는 경우 컴파일 시간에 타입을 알 수 없기에 사용한다.
const_cast
: 상수성을 제거할 때 사용한다.
reinterpret_cast
: C의 형변환과 동일한 것으로 되도록 사용하지 않는 것이 좋다.
'프로그래밍 > C++' 카테고리의 다른 글
생성자/소멸자를 protected, private에 놓는 경우 정리 (0) | 2017.11.08 |
---|---|
선언부와 구현부를 분리할 때 주의해야 할 것 정리 (0) | 2017.11.08 |
후위 반환 형식 trailing return type/ suffix return type (0) | 2017.10.08 |
함수를 못 쓰게 하기 (0) | 2017.10.08 |
인라인 함수 (0) | 2017.10.08 |