Computer >> Máy Tính >  >> Lập trình >> C ++

const_cast trong C ++ - Nhập toán tử ép kiểu

Nhiệm vụ được đưa ra là hiển thị hoạt động của const_cast trong c ++.

const_cast là một trong những toán tử ép kiểu. Nó được sử dụng để thay đổi giá trị không đổi của bất kỳ đối tượng nào hoặc có thể nói nó được sử dụng để loại bỏ tính chất không đổi của bất kỳ đối tượng nào.

const_cast có thể được sử dụng trong các chương trình có bất kỳ đối tượng nào với một số giá trị không đổi mà đôi khi cần được thay đổi vào một lúc nào đó.

Cú pháp

Cú pháp như sau -

const_cast<type name>(expression)

Ví dụ

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

Ví dụ sau cho thấy cách sử dụng cơ bản của const_cast. Ở đây chúng ta đã khai báo một biến hằng số "x" kiểu int đã được gán giá trị là 50 và một con trỏ hằng khác "y" kiểu int trỏ vào biến "x".

Con trỏ thứ ba phải được tạo để sử dụng const_cast và ở đây chúng tôi đã tạo con trỏ "z" có cùng kiểu dữ liệu, nghĩa là int.

Vì vậy, khi chúng ta chuyển con trỏ hằng số “y”, con trỏ đó trỏ đến biến hằng số “x” vào const_cast và gán một giá trị cho con trỏ z, chúng ta có thể thực hiện các thay đổi đối với giá trị của con trỏ hằng số “y” của chúng ta.

Bằng cách này, chúng tôi có thể thay đổi giá trị không đổi từ 50 thành 100 bằng cách sử dụng const_cast.

Nếu chúng tôi cố gắng thay đổi giá trị của “x” mà con trỏ “y” đang trỏ đến mà không sử dụng const_cast, thì lỗi sau sẽ được hiển thị - “chỉ định vị trí chỉ đọc”

Ví dụ

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

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

  • Đầu tiên, hãy tạo một biến không đổi có kiểu int và cung cấp cho nó một số kích thước phù hợp, giả sử “a” và giá trị của nó là 20.
  • Sau đó, tạo một con trỏ hằng số, chúng ta hãy nói “b” của cùng một kiểu dữ liệu và phân bổ cho nó địa chỉ của biến hằng số “a” của chúng ta.
  • Sau đó, tạo một con trỏ thứ ba, chúng ta hãy nói “c” của kiểu dữ liệu int sẽ được sử dụng cho const_cast.
  • Bây giờ, hãy chuyển con trỏ hằng số “b” của chúng ta vào const_cast và giữ nó ngang bằng với con trỏ “c” của chúng ta.
  • Cuối cùng, thực hiện các thay đổi trong giá trị của con trỏ “c”. Thao tác này sẽ tự động thực hiện các thay đổi về giá trị mà tại đó con trỏ hằng số “b” của chúng ta đang trỏ.

Thuật toán

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

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

old value is 20
new value is 40

Ở đây, con trỏ hằng số “b” được trỏ vào biến hằng số “a” có giá trị =20 là biến không thay đổi được. Nhưng bằng cách tạo con trỏ không hằng số thứ ba “c” của cùng một kiểu dữ liệu và sử dụng const_cast, chúng tôi có thể thay đổi giá trị không đổi đó.

Sự thay đổi giá trị của con trỏ “c” dẫn đến sự thay đổi của giá trị không đổi 20 tại đó con trỏ không đổi “b” đang trỏ. Do đó, trước khi sử dụng const_cast, giá trị đầu ra là 20 và sau khi sử dụng nó, giá trị đầu ra là 40.

Các cách sử dụng khác của const_cast

Trong bất kỳ chương trình nào, const_cast có thể được sử dụng để truyền dữ liệu hằng số cho một hàm khác không chấp nhận dữ liệu hằng số.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

1000

Chương trình sau đây cho thấy cách chúng ta có thể chuyển một giá trị không đổi là 100 bằng cách sử dụng const_cast vào hàm change () không nhận bất kỳ dữ liệu hằng số nào.

Hàm change () nhận giá trị và nhân nó với 10 và trả nó trở lại hàm main () tạo ra kết quả cuối cùng, nghĩa là 1000.

Nếu chúng ta chạy cùng một chương trình mà không có const_cast và cố gắng truyền trực tiếp giá trị hằng số vào hàm change (), nó sẽ hiển thị lỗi.