美文网首页
C++类型转换

C++类型转换

作者: delta1037 | 来源:发表于2020-04-29 11:41 被阅读0次

一、C风格的强制类型转换

eg:

char *str = "hello";
void *p = (void *)str;

二、C++风格的强制类型转换

const_cast ,static_cast ,dynamic_cast ,reinterpret_cast

2.1 const_cast

功能:const_cast主要用于修改指针。例如const char *p形式

使用模板:

const_cast < 新类型 > ( 表达式 )

常用于:

  • 常量指针转换成非常量的指针,并且仍指向原来的对象
  • 常量引用转换成非常量的引用,并且仍指向原来的对象

2.2 static_cast

功能:static_cast的作用于C语言风格的强制类型转换效果基本一致

使用模板:

static_cast < 新类型 > ( 表达式 )

常用于:

  • 类层次结构中基类和派生类之间的引用或者指针的转换
  • 基本数据类型之间的转换

注:

  • static_cast与C语言的强制类型转换一样,没有运行时类型检查,有安全隐患
  • 基类与父类之间的转换,上行转换(派生类转为基类)是安全的;下行转换(基类转为派生类)是由于没有动态类型检查是不安全的
  • 基本数据类型之间的转换的安全性需要开发者来进行维护
  • static_cast不能转换掉原有类型的const、volatile、或者 __unaligned属性。(前两种可以使用const_cast 来去除)
  • c++ primer 中说道:c++ 的任何的隐式转换都是使用 static_cast 来实现的

2.3 dynamic_cast

功能:沿继承层级向上、向下及侧向,安全地转换到其他类的指针和引用。

使用模板:

dynamic_cast < 新类型 > ( 表达式 )
  • 新类型:指向完整类型的指针,到完整类类型的引用,或指向(可选的cv限定)void的指针
  • 表达式:若新类型为引用,则为完整类类型的左值(<C++11)/泛左值(>=C++11)表达式;若新类型为指针,则指向完整类类型的指针纯右值

2.4 reinterpret_cast

功能:通过重新解释底层位模式在类型间转换。

使用模板:

reinterpret_cast < 新类型 > ( 表达式 )        

参考文献

【1】c++ 四种强制类型转换介绍
【2】zh.cppreference.com/w/cpp/language/const_cast
【3】zh.cppreference.com/w/cpp/language/static_cast
【4】zh.cppreference.com/w/cpp/language/dynamic_cast
【5】zh.cppreference.com/w/cpp/language/reinterpret_cast

相关文章

网友评论

      本文标题:C++类型转换

      本文链接:https://www.haomeiwen.com/subject/kbcgwhtx.html