주어진 작업은 C++에서 const_cast의 작동을 보여주는 것입니다.
const_cast는 유형 캐스팅 연산자 중 하나입니다. 어떤 개체의 상수 값을 변경하는 데 사용되거나 개체의 상수 특성을 제거하는 데 사용된다고 말할 수 있습니다.
const_cast는 특정 시점에서 가끔씩 변경해야 하는 일정한 값을 가진 개체가 있는 프로그램에서 사용할 수 있습니다.
구문
구문은 다음과 같습니다 -
const_cast<type name>(expression)
예시
Input: const int x = 50; const int* y = &x; cout<<"old value is"<<*y<<"\n"; int* z=const_cast<int *>(y); *z=100; cout<<"new value is"<<*y; Output: old value is 50 new value is 100
다음 예제는 const_cast의 기본 사용법을 보여줍니다. 여기서 우리는 값 50이 할당된 int 유형의 상수 변수 "x"와 변수 "x"를 가리키는 int 유형의 또 다른 상수 포인터 "y"를 선언했습니다.
const_cast를 사용하려면 세 번째 포인터를 만들어야 하며 여기에서 동일한 데이터 유형, 즉 int의 "z" 포인터를 만들었습니다.
따라서 상수 변수 "x"를 가리키는 상수 포인터 "y"를 const_cast에 전달하고 포인터 z에 값을 할당하면 상수 포인터 "y"의 값을 변경할 수 있습니다.피>
이런 식으로 const_cast를 사용하여 상수 값을 50에서 100으로 변경할 수 있었습니다.
const_cast 를 사용하지 않고 포인터 "y"가 가리키는 "x" 값을 변경하려고 하면 "읽기 전용 위치 할당" 오류가 표시됩니다.
예시
Input: const int x = 50; const int* y = &x; cout<<"old value is"<<*y<<"\n"; int* z=const_cast<int *>(y); *z=100; cout<<"new value is"<<*y; Output: old value is
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다. -
- 먼저 int 유형의 상수 변수를 만들고 적절한 크기를 지정합니다. 예를 들어 "a"이고 값이 20이라고 가정하겠습니다.
- 그런 다음 상수 포인터를 만들고 동일한 데이터 유형의 "b"를 말하고 상수 변수 "a"의 주소를 할당합니다.
- 그런 다음 세 번째 포인터를 만들고 const_cast에 사용할 데이터 유형 int의 "c"라고 합시다.
- 이제 상수 포인터 "b"를 const_cast에 전달하고 포인터 "c"와 동일하게 유지합니다.
- 마지막으로 포인터 "c"의 값을 변경합니다. 그러면 상수 포인터 "b"가 가리키는 값이 자동으로 변경됩니다.
알고리즘
Start Step 1 -> In function main() Declare a constant int a=20 Declare a constant pointer int* b=&a Declare a pointer int*c = const_cast<int *>(b) Assign *c=40 Stop
예시
#include <iostream> using namespace std; int main() { const int a = 20; const int* b = &a; cout<<"old value is"<<*b<<"\n"; int* c=const_cast<int *>(b); *c=40; cout<<"new value is"<<*b; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
old value is 20 new value is 40
여기서 상수 포인터 "b"는 변경할 수 없는 값=20인 상수 변수 "a"를 가리킵니다. 그러나 동일한 데이터 유형의 세 번째 비상수 포인터 "c"를 만들고 const_cast를 사용하여 해당 상수 값을 변경할 수 있습니다.
포인터 "c"의 값이 변경되면 상수 포인터 "b"가 가리키는 상수 값 20이 변경됩니다. 따라서 const_cast를 사용하기 전의 출력값은 20, 사용 후의 출력값은 40이었습니다.
const_cast의 다른 용도
모든 프로그램에서 const_cast는 상수 데이터를 허용하지 않는 다른 함수에 상수 데이터를 전달하는 데 사용할 수 있습니다.
예시
#include <iostream> using namespace std; int change(int* p2) { return (*p2 * 10); } int main() { const int num = 100; const int *p = # int *p1 = const_cast <int *>(p); cout << change(p1); return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
1000
다음 프로그램은 상수 데이터를 수신하지 않는 함수 change()에 const_cast를 사용하여 상수 값 100을 전달하는 방법을 보여줍니다.
change() 함수는 값을 받아 10을 곱한 다음 최종 출력, 즉 1000을 생성하는 main() 함수로 다시 반환합니다.
const_cast 없이 동일한 프로그램을 실행하고 상수 값을 change() 함수에 직접 전달하려고 하면 오류가 표시됩니다.