반응형
const_cast 필요성
C언어 캐스팅으로 const 주소를 받아서
값을 다르게 해볼 수 있다.
#include <iostream>
int main()
{
const int c = 100;
int* p = (int*)&c;
*p = 5;
std::cout << *p << std::endl; // 5
}
엄격한 제한을 두지 않는 C Style Casting 이기 때문에
개발자가 의도한 것인지 분명하지 않다.
const_cast 활용
C++에서는 const_cast 활용하여
상수성을 제거할 수 있다.
(static_cast와 reinterpret_cast 에서는 error 발생)
int main()
{
const int c = 100;
int* p = const_cast<int*>(&c);
}
C++에서는 casting 마다 역할이 있기 때문에
필요하다면 각 역할에 맞게 중첩 캐스팅 해볼 수 있다.
* const_cast는 같은 타입으로 상수성 제거 가능
int main()
{
const int c = 100;
// C Style (const 변수를 다른 타입으로 캐스팅)
char* p1 = (char*)&c;
// 상수성을 먼저 제거하고 다른 타입으로 캐스팅
char* p2 = reinterpret_cast<char*>( const_cast<int*> (&c) );
// 다른 타입으로 먼저 캐스팅 후 상수성 제거
char* p2 = const_cast<char*> ( reinterpret_cast<const char*> (&c) );
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] static_cast 사용 방법 및 필요성 (1) | 2025.01.26 |
---|---|
[C++] 람다 표현식 lambda expression (2) | 2025.01.25 |
[C++] reinterpret_cast 필요성 및 사용 방법 (2) | 2025.01.21 |
[C++] [STL] Vector 사용 방법 (1) | 2025.01.20 |
[C++] 레퍼런스 Reference (2) | 2025.01.19 |
댓글