댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
C++
2014.08.04 14:59
Cast. 캐스팅. 형변환
조회 수 11401 댓글 0
A. C의 캐스팅은 너무 위험해서 (비이성적,
Unresonable) 그대로 사용 못함. 1. int a = 3; i. 이렇게 하면 메모리가 깨집니다. 이거 위험하죠 2. const int c = 10; i. (1)은 10, (2)는 20이 나옵니다. ii. 이유 a. const int c = 10 하면 c가 10인걸 알아요. 컴파일 타임에. b. 이 컴파일 시간 상수는 마치 매크로 처럼 c가 쓰인 곳은 10으로 치환되어 처리되는 것. B. C++은 4가지 스타일의 캐스팅을 제공 1. static_cast : 안전하고 이성적인 캐스팅. void* => 다른 타입 가능. 그 외에는 연관된 타입만 가능 2. reinterpret_cast : 하위 수준의 캐스팅. 대부분 성공. 메모리의 재해석 3. const_cast : 객체의 상수성 제거 4. dynamic_cast : 안전한 다운 캐스팅. 실행시 높은 비용. RTTI 를 위한 캐스팅
C. 될 수 있으면 static_cast 를 사용하세요 -const_cast const로 선언된 상수를 일반변수로 변환하는데 사용된다. volatile를 변환시키는데도 쓰인다
-static_cast c캐스팅과 비슷한 기본적인 캐스팅 연산자로 실수형, 정수형, 열거형등 기본적인 형변환을 할때 사용된다 const_cast와 달리 일반변수를 상수로 바꿀수있지만 상수를 일반변수로 바꾸진못한다 c캐스팅과의 차이점은 타입체크를 run-time으로 하지않고 compile-time에 정적으로 수행한다
-reinterpret_cast 어떠한 정수와 포인터 타입간에도 변환이 가능한 강력한 형변환이다 하지만 기본적인 캐스팅개념에서 벗어나 강제로 바꿔 매우 불안정하기 때문에 쓰려면 위험을 감수해야한다
-dynamic_cast 상속관계에있는 클래스간의 형변환을 할때 사용한다 형변환에 문제가없는지 안전검사도하는데 문제가 있을시에는 NULL값을 리턴하거나 예외를 띄운다 가상함수가 없는 클래스는 사용할 수 없다
1. static_cast - 묵시적 캐스트로 일반 변수형을 반환해준다.
간단한 예)
묵시적 캐스팅과의 차이점 - 클래스 포인터에 대해 묵시적 캐스트는 is-a 관계가 성립하는 경우만 허용하고 static_cast는 is-a 관계뿐만아니라 상속관계일때도 캐스팅을 해준다.
명시적 변환이기는 하나 컴파일 타임에 타입 체크를 하는 등 대체적으로 안전한 형변환 이다. 2. reinterpret_cast 일반적으로 허용하지 않는 위험한 형변환을 할때 사용한다. 단지 안의 있는 비트열만 보고 원하는 형으로 강제 변환을 할때 사용한다. 포인터를 정수로 변환하는 작업을 사용할때 많이 사용한다.
간단한 예)
3. dynamic_cast
- 유일하게 c스타일의 형변환으로 불가능한 캐스팅. 상속관계에 있는 클래스의 형변환을 수행하며. 동시에 안전한지 검사 한다.
간단한 예)
4. const_cast
- const 속성이나 volatile속성을 해제 할때 사용한다.
변수를 정의할때 volatile 키워드를 사용한다.
즉 상수로 정의한 변수를 변경하고 싶을때 사용한다. 간단한 예)
Dreamy의 코드 스크랩내가 모으고 내가 보는
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5