给出的任务是显示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均可用于将常量数据传递给另一个不接受常量数据的函数。
#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()
函数,它将显示错误。