반응형
안녕하세요. 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
감사합니다.
반응형
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] new, delete 동적할당과 해제에 대해서 (0) | 2018.12.04 |
---|---|
[C++] 가상함수와 순수가상함수의 차이(virtual, pure virtual)에 대해서 (8) | 2018.08.13 |
[C++] dynamic_cast (타입캐스트 연산자) (1) | 2018.07.25 |
[C++] reinterpret_cast (타입캐스트 연산자) (5) | 2017.11.29 |
[C++] static_cast (타입캐스트 연산자) (4) | 2017.11.28 |
[C++] sort algorithm 정리 및 예시 (6) | 2017.10.17 |
[C++] 레퍼런스, Reference, 참조자 (0) | 2017.09.23 |
[C++] priority_queue container 정리 및 사용법 (4) | 2017.08.04 |