首页 > 编程语言 >C++中的四种强制类型转换

C++中的四种强制类型转换

时间:2022-10-21 01:45:26浏览次数:49  
标签:类型转换 转换 dynamic C++ cast 引用 类型 四种 指针

①static_cast(expression)<type-id> 该运算符把expression转换为type_id类型,但没有运行时类型检查来保证转换的安全性,最常用的是基本数据类型之间的转换

 

②const_cast(expression) <type-id>上面的static_cast不能将const int*转成int*,const_cast就可以, <>里边的内容必须是指针或者引用,就连int转换int也不行

 

 

③reinterpret_cast 主要有三种强制转换用途:改变指针或引用的类型;将指针或引用转换为一个足够长度的整型;将整型转换为指针或引用的类型, reinterpret_cast<type-id>(expression) type-id必须是一个指针、引用、算数类型、函数指针或成员指针。他可以把一个指针转换为一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值) ***慎用   ④dynamic_cast(expression)<type-id> 几个特点如下:   (1)其他三种都是编译时完成的,dynamic_cast 是运行时处理的,运行时要进行类型检查。   (2)不能用于内置的基本数据类型的强制转换   (3)dynamic_cast 要求 <> 内所描述的目标类型必须为指针或引用。dynamic_cast 转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回 nullptr   (4)在类的转换时,在类层次间进行上行转换(子类指针指向父类指针)时,dynamic_cast 和 static_cast 的效果是一样的。在进行下行转换(父类指针转化为子类指针)时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全。 向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。   (5)使用 dynamic_cast 进行转换的,基类中一定要有虚函数,否则编译不通过(类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义)。这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表      

 

标签:类型转换,转换,dynamic,C++,cast,引用,类型,四种,指针
From: https://www.cnblogs.com/dhwcpp/p/16812158.html

相关文章

  • C++面试问题
    如何实现一个不能被继承的类?将其构造函数设置成私有类型 若仍要访问?设置友元类 实现一个可以被继承的类,但不能在外部函数中创建对象的类型?构造函数设置为受保护......
  • Microsoft_Visual_C++_6-0简体中文版
    软件截图​安全认证官方版评价等级⭐️⭐️⭐️⭐️⭐️发布时间2011-10-1719:47:56更新时间2013-07-0219:47:562022-10-2023:24:10软件版本V6.0应用平台Win2003/Wi......
  • C++Primer笔记
    数据类型类型转换当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型所能表示数值的总数取模之后的余数,例如:8bit的unsignedchar可以表示0至255这256个......
  • 在Native C++中调用C#代码
     在关于C++与C#互操作的大多中文文章中,介绍都是在C#中如何使用C++的功能,本文将为大家介绍在C++中如何调用C#的功能。首先,简单介绍一下C#如何使用C++的功能,以作者所......
  • C++ 中 const 关键字的作用总结
    const的含义相信大部分程序员都对const不陌生,英文翻译中作为形容词意思为恒定的,不变的,作为名词翻译为常量,恒量,其实,这在很大程度上已经说明了这个关键字的含义。接下来,让......
  • 数据绑定之数据类型转换
    springmvc已经创建好了数据转换和数据绑定的类如果我们的数据不符合他们定义好的格式,需要自己处理处理方式两种3.1方式1自定义转换类3.1.1创建转化类extendsPropertyEd......
  • 实验3 数组、指针与现代C++标准库
    实验任务五:Info.hpp:#pragmaonce#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{private:stringnickname,cont......
  • Java四种线程池
    1,线程池的作用 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果。 2,为什么要用线程池? (1).减少了创建......
  • C++类模型漫谈(三)
    系统基于32位,MSVC编译器,VS开发工具1、上篇直接通过类型对象调用成员函数,这种方式无法实现多态。所谓多态意思对函数的调用呈现出不同的形态。下面这个例子中a_ptr为指向......
  • 实验3 数组、指针与现代C++标准库
    实验5#pragmaonce#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classinfo{public:info(stringnickname0,stringcontact......