C++中static_cast、const_cast、reinterpret_cast和dynamaic_cast

本文深入探讨了C++中四种类型转换操作符:static_cast、const_cast、reinterpret_cast和dynamic_cast的使用场合与注意事项。static_cast用于数值类型转换,const_cast用于修改常量属性,reinterpret_cast用于不相关类型转换,dynamic_cast则涉及运行时类型识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.static_cast

主要使用场合

  1. 当把一个较大的算术类型转化为一个较小的算术类型时,使用告诉编译器,我们不在乎精度损失,从而关闭编译器的警告
	double d = 9.3;
	int i = d; //warning:可能丢失数据。有的编译器也不提示。
	int i = static_cast<int>(d);//no warning
  1. 对于编译器无法自动进行的类型转换,eg:void*类型指针和普通类型指针的转换。安全由程序员自己保证。
	void* p = &d; //由自己保证d是一个double类型的数据,否则产生未定义错误。
	char* dp = static_cast<double*>(p);
2.const_cast

主要使用场合

  1. const_cast只能改变对象的底层const.去除或者加上。
	//const int data = 1;
	int data = 1;
	const int& const_ref = data;
	int& not_const_ref = const_cast<int&>(const_ref);
	not_const_ref = 2;
	cout << data << endl;//2,  still 1 while const int data.
	cout << const_ref << endl;//2
	cout << not_const_ref << endl;//2

主要使用场合为函数重载,例如已经有一个函数,另一个函数依赖它完成。

const string& shorter_string(const string& s1, const string& s2) {
	cout << "const" << endl;
	return s1.size() < s2.size() ? s1 : s2;
}

string& shorter_string(string& s1, string& s2) {
	cout << " not const" << endl;
	const string& r = shorter_string(static_cast<const string&>(s1), static_cast<const string&>(s2));
	return const_cast<string&>(r);
}
3.reinterpret_cast

1.不相关类型的转换,非常危险;hash函数中可使用。

unsigned short Hash( void *p ) {  
   unsigned int val = reinterpret_cast<unsigned int>( p );  
   return ( unsigned short )( val ^ (val >> 16));  
} 
4.dynamic_cast

见我另一片文章C++运行时类型设别(run-time type identification, RTTI)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值