const_cast简单使用

一、语法
const_cast<type>(expression)
二、作用:实现const修饰的指针或引用的去const化。
三、代码
#include<iostream>
using namespace std;

//const_cast 只作用于指针和引用,去const化,把常变为非常
void test01(){
	int a;
	const int& ra = a;
	a = 100;
	cout << a << endl;
	//ra = 200;  //编译出错 
	const_cast<int&>(ra) = 200; //实现通过常引用修改变量的值 
	cout << ra << endl;
	cout << a << endl;
	
	const int* pa = &a;
	//*pa = 300; //read-only
	*const_cast<int*>(pa) = 300;
	cout << *pa << endl;
	cout << a << endl;
} 

//注意:const_cast只有在原来不是const的变量上面去const才是安全的
//若变量本身就是const修饰的变量,在去const化后,执行写操作无法修改被引用的变量的数据 
void test02(){
	//1.不安全 
	const int a = 100;  //const变量 
	const int& ra = a;
	const_cast<int&>(ra) = 200;  //写操作,发生未定义行为 
	cout << "a:" << a << endl;  //100
	cout << "ra:" << ra << endl; //200
	
	//2.安全 
	struct Data{
		int a;  //非const变量 
	};
	const Data d = {10};  //在非const变量上加const 
	const Data& rd = d;
	const_cast<Data&>(rd).a = 20;
	cout << "d.a=" << d.a << endl;  //20
	cout << "rd.a=" << rd.a << endl; //20
}

int main(){
	test01();
	cout << "----------------" << endl;
	test02();
	
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值