กำหนดภารกิจคือแสดงการทำงานของ 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() โดยตรง โปรแกรมจะแสดงข้อผิดพลาด