const int b = i; int *r2 = const_cast<int*>(&b); (*r2)++; cout << b << endl; 这两段代码做的事情非常类似,也就是通过const_cast修改了一个const修饰的int。唯一的不同是int a是直接赋值成了3,而int b是赋值成了另外一个也等于3的int。这两者其实并没有什么区别,对吧?但是当我们运行代码...
1constintvalue=12;2intnew_value=const_cast<int>(value);//错误:const_cast只能改变运算对象的底层const,而对顶层const无能为力(编译信息:[Error] invalid use of const_cast with type 'int', which is not a pointer, reference, nor a pointer-to-data-member type) 34constint* value_ptr=&value;...
c++类型有四种类型转换,分别是static_cast、const_cast、reinterpret_cast以及dynamic_cast,下面浅谈下个人理解。 1.const_cast 首先看一个错误的用法: 1constinti =10;2int*p = const_cast<int*>(&i);3*p =20; //行为未定义4std::cout << i << std::endl; 上面这段代码输出如下: 110 i的结果是10,...
const_cast<type *>(this)->i = v; // OK as long as the type object isn't const } }; int main(){ [[maybe_unused]] void (type::*pmf)(int) const = &type::f; // pointer to member function // const_cast<void(type::*)(int)>(pmf); // compile error: const_cast does //...
7 const_cast可以去掉const标签,但是不一定能过改变变量的值,下面举个例子进行说明,首先定义如下函数,转换const int *的类型为 int * , 然后对值进行修改 8 主函数添加如下的测试代码,注意定义了两个变量一个示int, 另一个是const int 9 最后运行的结果如下所示,从中可以看出,iNum1的值改变,而iNum2的...
const_cast ( expression ) 主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。 去掉const属性:const_case (&num),常用,因为不能把一个const变量直接赋给一个非const变量,必须要转换。 加上const属性:const int* k = const_case(j),一般很少用,因为可以把一个非const变量直接赋给一...
这里我们需要强调的是 const_cast主要用于更改指针或引用的const或volatile限定符。其中,type_name必须是指针、引用或者成员指针类型。示例1:#include<iostream>structtype {int i; type(): i(3) {}voidf(int v)const{// this->i = v; // 编译错误:this 是指向 const 的指针const_cast<type *>...
因为对modifier的修改并不会影响到constant,这暗示了一点:const_cast转换符也不该用在对象数据上,因为这样的转换得到的两个变量/对象并没有相关性。 只有用指针或者引用,让变量指向同一个地址才是解决方案,可惜下边的代码在C++中也是编译不过的:const int constant = 21; int* modifier = &constant // Error: ...
在此示例中,我们首先声明了一个指向常量int的指针ptr,并使用new运算符从堆上分配了一个int类型的内存,并将其值设置为10。然后,我们使用const_cast将指针ptr强制转换为int类型的指针ptr1,并使用赋值运算符将值20存储到ptr1指向的地址。最后,我们打印了ptr指向的值和ptr1指向的值。输出结果如下: ...
const_cast 用法 语法: const_cast<type-name>(expression); 作用: 1. 将const对象的地址赋给同类型的非const指针。例如: const int val = 100; int * pv = const_cast<int *>(&val); 但是,仍然无法通过这个非const指针pv来修改const对象val。所以,我觉得 const_cast 没有什么用。