7.24(화) C++ 기초문법 - explicit casting

from Study/C++ 2007/07/24 16:30 view 20177

2교시

// C++ explicit casting
개념

// 1. C의캐스팅은대부분성공한다. 하지만너무나위험하고, 버그가많다.

// 2. C++은용도에따라4가지의casting 연산자가제공된다.

// dynamic_cast : RTTI를위해존재.!! - 상속을알아야한다.

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

Tag |

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다