美文网首页程序员
C++ 强制类型转换

C++ 强制类型转换

作者: rmrfany | 来源:发表于2018-12-30 18:09 被阅读0次
  • static_cast,是一个强制类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
char a = 'a';
int b = static_cast<int>(a);//正确,将char型数据转换成int型数据

double *c = new double;
void *d = static_cast<void*>(c);//正确,将double指针转换成void指针

int e = 10;
const int f = static_cast<const int>(e);//正确,将int型数据转换成const int型数据

const int g = 20;
int *h = static_cast<int*>(&g);//编译错误,static_cast不能转换掉g的const属性
  • const_cast,用于修改类型的const或volatile属性。
const int g = 20;
int *h = const_cast<int*>(&g);//去掉const常量const属性

const int g = 20;
int &h = const_cast<int &>(g);//去掉const引用const属性

const char *g = "hello";
char *h = const_cast<char *>(g);//去掉const指针const属性
  • reinterpret_cast,可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。reinterpret_cast意图执行低级转型,实际动作(及结果)可能取决于编辑器,这也就表示它不可移植。错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式。
float f =  -12.4545;
unsigned char* p = reinterpret_cast<unsigned char*>(&f);
  • dynamic_cast,主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换(cross cast)
    dynamic_cast<type*>(e)
    dynamic_cast<type&>(e)
    dynamic_cast<type&&>(e)
    type必须是一个类类型,在第一种形式中,type必须是一个有效的指针,在第二种形式中,type必须是一个左值,在第三种形式中,type必须是一个右值。在上面所有形式中,e的类型必须符合以下三个条件中的任何一个:e的类型是是目标类型type的公有派生类、e的类型是目标type的共有基类或者e的类型就是目标type的的类型。如果一条dynamic_cast语句的转换目标是指针类型并且失败了,则结果为0。如果转换目标是引用类型并且失败了,则dynamic_cast运算符将抛出一个std::bad_cast异常(该异常定义在typeinfo标准库头文件中)。e也可以是一个空指针,结果是所需类型的空指针。

相关文章

  • C++类型转换

    一、C风格的强制类型转换 eg: 二、C++风格的强制类型转换 const_cast ,static_cast ,...

  • C++类型转换

    C++类型转换 C++为了规范C中的类型转换,加强类型转换的可视性,引入了四种强制类型转换操作符:static_c...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

  • 第三章 JavaScript中的数据间类型的转换

    数据的类型转换分为强制类型转换和非强制类型转换,强制类型转换也可以称为显示转换,非强制类型转换也可以称为隐式转换。...

  • static_cast、dynamic_cast、reinter

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: C++风格的类型转换提供了4种类型转...

  • 第十一章 使用类(4)类的自动转换和强制类型转换

    (四)类的自动转换和强制类型转换 1.对内置基本数据类型的转换: C++如何处理数据类型的转换,包括自动转换和强...

  • C++类型强制转换

    类型转换 隐式类型转换 显式类型转换 语法 1. static_cast 用法用于非多态类型之间的转换,不提供运行...

  • C++ 强制类型转换

    static_cast,是一个强制类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast来完成...

  • js 实用小套路,你需要的开发小技巧

    强制类型转换 强制转换为Boolean 用 !! 强制转换为Number 用 + 强制转换为String 用 ""...

  • 前端知识点(10)

    强制类型转换 强制类型转换 - 指将一个数据类型强制转换为其他的数据类型 - 类型转换主要指,将其他的数据类型,转...

网友评论

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

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