细说C++类型转换操作符

发表于:2012-9-27 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:RO_wsy    来源:51Testing软件测试网采编

  C++语言虽然兼容C,也支持C语言的类型转换用法,就是将类型用圆括号括起来,这种转换可视性比较差,难以跟踪错误的转换。C++提供了命名的强制转换操作符,毕竟转换有时是不安全的,所以使用命名转换操作符可以根据所使用的转换操作符可以判断风险级别。

  下面我们就来看看C++提供的四种命名的强制转换操作符的具体功能和用法。

  1、const_cast

  2、static_cast

  3、reinterpret_cast

  4、dynamic_cast

  这四个操作符的使用方法是相同的,都是cast-name<Type>(expression),Type是被转换值expression的目标类型。

  下面看看这四个操作符分别的应用场合。

  1、const_cast

  顾名思义,const_cast就是将表达式的const性质去掉,例如

char* string_copy(char* s)
{
 return s;
}
int main()
{
 const char* pc_str;
 char* pc = string_copy(const_cast<char*>(pc_str));//如直接传入pc_str则编译错误
 return 0;
}

  上例只是说明问题,并不实现功能。

  要记住,const_cast只能用来添加或删除const特性,同时添加或删除特性也只能用const_cast。

  2、static_cast

  这个用途比较广泛,编译器隐式执行的任何类型转换都可以有static_cast完成。

  另外,static_cast多用于将一个void*类型的指针强制转换为原来的指针类型,例如:

 double d = 12;
 void* p = &d;
 double* pd = static_cast<double*>(p);
 cout << *pd << endl;

  输出结果为12,说明转换后依然还是指向同一个地址。

  3、reinterpret_cast

  这个操作符很难看,也很难记,为什么呢,因为危险性比较大,设计成这个样子就是为了让我们尽量不用它,它用于对指针之间进行转换,例如:

 int* ip;
 char* pc = reinterpret_cast<char*>(ip);
 string str(pc);

  虽然可以编译通过,但是却会带来严重的运行时错误,所以,要尽量避免reinterpret_cast的使用。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号