C++ 中的 const_cast - 类型转换运算符

c++server side programmingprogramming

给定的任务是展示 c++ 中 const_cast 的工作原理。

const_cast 是类型转换运算符之一。它用于更改任何对象的常量值,或者我们可以说它用于删除任何对象的常量性质。

const_cast 可用于任何具有某些常量值的对象的程序中,这些对象在某些时候需要偶尔更改。

语法

语法如下 −

const_cast<类型名称>(表达式)

示例

输入:
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;
输出:old value is 50
new value is 100

以下示例显示了 const_cast 的基本用法。这里我们声明了一个 int 类型的常量变量 ”x”,该变量被赋予了 50 的值,另一个 int 类型的常量指针 “y” 指向变量 “x”。

必须创建第三个指针才能使用 const_cast,这里我们创建了指针 ”z”属于同一数据类型,即 int。

因此,当我们将指向常量变量"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"的地址。
  • 然后创建第三个指针,假设为 int 数据类型的"c",用于 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"值的改变导致常量指针"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() 函数,则会显示错误。


相关文章