C++ 中的 const_cast - 型別轉換運算子


給定的任務是展示 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 的基本用法。這裡我們聲明瞭一個型別為 int 的常量變數“x”,並將其賦值為 50,以及另一個型別為 int 的常量指標“y”,它指向變數“x”。

需要建立第三個指標來使用 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”的地址。
  • 然後建立一個第三個指標,例如“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”指向值為 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

以下程式顯示瞭如何使用 const_cast 將常量值 100 傳遞給不接收任何常量資料的函式 change()。

change() 函式接收該值並將其乘以 10,然後將其返回到生成最終輸出(即 1000)的 main() 函式。

如果我們在沒有 const_cast 的情況下執行相同的程式,並嘗試將常量值直接傳遞到 change() 函式,它將顯示錯誤。

更新於: 2020年1月20日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.