Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 const_cast - 유형 캐스팅 연산자

<시간/>

주어진 작업은 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() 함수에 직접 전달하려고 하면 오류가 표시됩니다.