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를 사용하여 형변환을 하자!!!