#include<iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////////////////
//주제 4 C++ Explicit cast
//1. C 의 캐스팅은 너무 위험하다 (Unresonable , 비이상적이다)
//2. 그래서 C++ 은 4가지 캐스팅 연산자를 따로 만들었다
//(A) static_cast : 이성적인 것만 허용
//(B) reinterpret_cast : 메모리 재해석 - 거의 성공
//(C) const_cast : 객체의 상수 제거
//(D) dynamic_cast : RTTI 기술
////////////////////////////////////////////////////////////////////////////////////////
int main(){
double d = 3.4;
int n =d; //date 손실이 발생하지만 암시적 변환이 허용된다.
int n = static_cast<int>(d); //<OK 허용!>
double * p =(double *)&n; // ㅏㅁ시적은 안되지만 명시적 캐스팅은 된다.
//double * p =static_cast<double *>(&n); //Error !! 그래도 꼭 쓰고싶어? 그럼 아래 껄로!
double * p =reinterpret_cast<double *>(&n); //Error !!
const int c= 0;
//int *p2 = (int *) &c; // 상수의 포인터를 비상수 포인터로 가리킬수 없다. 하지만 명시적은 된다!?!;; 완전 불안하다.
//int *p2 = static_cast<int *> (&c); // 안된다! 그래도 해보고싶다?
//int *p2 = reinterpret_cast<int *> (&c); // 안된다! 상수는 바꿀수 없다
int *p2 = const_cast<int *>(&c); // 원본이 read 만 가능한 const 일때는 const_cast 라 하더라도 절대 값을 바꾸지는 말자.
*p2 = 10 ;
cout << c <<endl; // 하지만 결과는 0이다! const 를 가리키는 포인터는 혼란을 초래할 뿐이다.
}
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]6. 객체 지향의 탄생 배경을 STACK 소스로 알아보기 (0) | 2012.08.13 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의 ] 5. 참조변수 편 (0) | 2012.08.13 |
[SSM 안드로이드 프레임워크 개발 강의 ] 3. 메크로와 템플릿?! (0) | 2012.08.13 |
[ SSM 안드로이드 프레임워크 개발 강의 ] 2. 인라인 함수 (0) | 2012.08.13 |
[SSM 안드로이드 프레임워크 개발 강의 ] 1. 함수 오버로딩 (0) | 2012.08.13 |