Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

const_cast ใน C ++ - พิมพ์ตัวดำเนินการแคสต์


กำหนดภารกิจคือแสดงการทำงานของ const_cast ใน c++

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 ในที่นี้เราได้ประกาศตัวแปรคงที่ ”x” ของประเภท int ซึ่งกำหนดค่าเป็น 50 และตัวชี้คงที่อีกตัวหนึ่ง “y” ของประเภท int ซึ่งชี้ไปที่ตัวแปร “x”

ต้องสร้างตัวชี้ตัวที่สามเพื่อใช้ const_cast และที่นี่เราได้สร้างตัวชี้ ”z” ของประเภทข้อมูลเดียวกัน นั่นคือ int.

ดังนั้นเมื่อเราส่งตัวชี้คงที่ "y" ซึ่งชี้ไปที่ตัวแปรคงที่ "x" ลงใน const_cast และกำหนดค่าให้กับตัวชี้ z เราจะสามารถเปลี่ยนแปลงค่าของตัวชี้คงที่ "y" ได้

วิธีนี้ทำให้เราเปลี่ยนค่าคงที่จาก 50 เป็น 100 โดยใช้ const_cast

หากเราพยายามเปลี่ยนค่าของ “x” ที่ตัวชี้ “y” ชี้ไปโดยไม่ใช้ const_cast ข้อผิดพลาดต่อไปนี้จะแสดงขึ้น-“การกำหนดตำแหน่งแบบอ่านอย่างเดียว”

ตัวอย่าง

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"
  • จากนั้นสร้างตัวชี้ที่สาม ให้เราพูดว่า "c" ของชนิดข้อมูล int ที่จะใช้สำหรับ const_cast
  • ส่งตัวชี้คงที่ "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" จะชี้ไปที่ตัวแปรคงที่ "a" โดยมีค่า =20 ซึ่งไม่สามารถเปลี่ยนแปลงได้ แต่ด้วยการสร้างตัวชี้ที่ไม่คงที่ตัวที่สาม “c” ของประเภทข้อมูลเดียวกันและใช้ const_cast เราสามารถเปลี่ยนค่าคงที่นั้นได้

การเปลี่ยนแปลงค่าของตัวชี้ "c" ส่งผลให้เกิดการเปลี่ยนแปลงค่าคงที่ 20 ซึ่งตัวชี้คงที่ "b" กำลังชี้ ดังนั้นก่อนใช้ 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

โปรแกรมต่อไปนี้แสดงวิธีที่เราสามารถส่งค่าคงที่ 100 โดยใช้ const_cast ไปยังฟังก์ชัน change() ที่ไม่ได้รับข้อมูลคงที่

ฟังก์ชัน change() รับค่าและคูณด้วย 10 แล้วคืนค่ากลับไปที่ฟังก์ชัน main() ที่สร้างผลลัพธ์สุดท้าย นั่นคือ 1,000

หากเราเรียกใช้โปรแกรมเดียวกันโดยไม่ใช้ const_cast และพยายามส่งค่าคงที่ไปยังฟังก์ชัน change() โดยตรง โปรแกรมจะแสดงข้อผิดพลาด