2교시
// C++ explicit casting 개념
// 1. C의캐스팅은대부분성공한다. 하지만너무나위험하고, 버그가많다.
// 2. C++은용도에따라4가지의casting 연산자가제공된다.
#include <iostream>
using namespace std;
int main()
{
const int c = 10;
int *p = (int*)&c;
//int* p = static_cast<int*>(&c);
// 당연히에러.. 말도안되는코드
//int* p = reinterpret_cast<int*>(&c);
//const를벗겨낼수없다. error
//int* p = const_cast<int*>(&c);
// ok. 동일type의객체에대해const속성을제거
// 단, 지금처럼const 상수에는사용하지는않는다.const object에사용.
*p = 30;
cout << c << endl << *p << endl << &c << endl << p << endl;
}
/*
int main()
{
int a = 0;
double d = 3.4;
//int n = d;
// 암시적변환가능. 하지만data의손실이발생한다.
//static_cast : 위험하지않은이성적인변환만허용한다.
static_cast : 위험하지않은이성적인변환만허용한다
//double *p = (double*)&n; // 암시적변환은불가능.
// C의명시적변환은가능.
// 결국template 함수의인자를명시적으로지정하고있는모양이다.
//double* p = static_cast<double*>(&n); // 허용해줄까? 에러!!
double* p = reinterpret_cast<double*>(&n);
// ok..대부분성공, C캐스팅과비슷.
*p = 100;
}
*/
결론 : static_cast를 사용하여 형변환을 하자!!!