<개인공부>/[C++]

[C++] const_cast (타입 캐스트 연산자)

BlockDMask 2017. 11. 28. 15:50
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 오늘은 C++ 의 네가지 타입 캐스트 연산자 중에
    (static_cast, const_cast, reinterpret_cast, dynamic_cast)
    const_cast 에 대해 알아보겠습니다.

> const_cast 에 관한 기본 특성

  • const_cast<new_type>(expression)

  • const_cast<바꿀타입>(대상)

  • const_cast는 포인터(pointer) 또는 참조형(reference)의 상수성(const)를 잠깐 제거해주는데 사용합니다.

  • const_cast는 volatile 키워드를 잠깐 제거해 주는 데에도 사용이 가능합니다.

  • 다른 캐스트 연산자가 하는 형 변환은 불가능 하며 오직 상수성(const)를 제거하는 것만 사용가능 합니다.
    또한 다른 캐스트 연산자는 const_cast가 하는 상수성(const) 제거를 하지 못합니다. 

  • 함수 포인터에는 사용 불가능합니다. (해봤음;;)

> 예제(1) - 포인터(pointer) 상수성(const) 제거

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
 
int main(void){
    char str[] = "BlockDMask";
    const char * ptr = str;
    cout << "before : " << str << endl;
 
    //ptr[0] = 'Q'; ==> error
 
    char * c = const_cast<char *>(ptr);
    c[0= 'Q';
    cout << "after : " << str << endl;
 
    return 0;
}
cs


--> 결과


> 예제(2) - 참조형(reference) 상수성(const) 제거

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
 
int main(void){
    int tmp = 15;
    const int &ref = tmp;
    cout << "before : " << tmp << endl;
 
    // ref = 20; == > error;
 
    int & r = const_cast<int &>(ref);
    r = 30;
    cout << "after : " << tmp << endl;
 
    return 0;
}
cs


--> 결과

.

--> ERROR

,

--> const 선언이 되어있으므로 ref 의 값을 변경 할 수 없다.


<참고자료>

http://en.cppreference.com/w/cpp/language/const_cast

감사합니다.

반응형