用C ++转换为const

给出的任务是显示const_cast在C ++中的工作。

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

const_cast可以用于具有任何具有恒定值的对象的程序,这些对象有时需要在某些时候进行更改。

语法

语法如下-

const_cast<type name>(expression)

示例

Input: 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”。

因此,当我们将常量指针“ y”传递到const_cast并指向常量变量“ x”并为指针z赋值时,便可以更改常量指针“ y”的值。

这样,我们可以使用const_cast将常量值从50更改为100。

如果我们尝试在不使用const_cast的情况下更改指针“ y”所指向的“ x”的值,则将显示以下错误:“分配只读位置”

以下程序中使用的方法如下-

  • 首先创建一个类型为int的常量变量,并为其指定合适的大小,比如说“ a”,其值为20。

  • 然后创建一个常量指针,让我们说相同数据类型的“ b”,并为其分配常量变量“ a”的地址。

  • 然后创建第三个指针,让我们说出要用于const_cast的int数据类型的“ c”。

  • 现在,将常量指针“ 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,而在使用const_cast之后,输出值为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,然后将其返回给main()生成最终输出(即1000)的函数。

如果我们在没有const_cast的情况下运行相同的程序,并尝试将常量值直接传递给change()函数,它将显示错误。