栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++中四种

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++中四种

c++中四种_cast类型转换的作用的简述 优点

使用四种变幻方便在转换出现错误的时候检查错误,比如说,我只查询_cast关键字就能得到左右的类型转化位置。

同时,四种变还也能保证变幻的安全性。

简述
  1. static_cast
    static_cast不能用于不同类型的指针、不同类型的引用、整形和指针之间的转换,可以用于整形、浮点形、字符之间的相互转换。基本上就是用于静态类型的转换(没有虚函数,不是多态类)
  2. const_cast 主要用于将const常量属性去掉和增加const属性
    使用方法:
type expr = const_cast(expression)
// type只有三种选择: reference(引用), pointer-to-object(指向对象指针), pointer-to-data-member(指向数据的指针)

在四种强制转换中,只有他能脱掉或加上const属性,脱掉const属性时其他的方法会报错(如果你使用(type)这种形式的强制转换为指针或者引用,其实也能将const去掉),但是加上const属性时,这四种方法都可以
例如:

#include
using namespace std;

class Base
{
    public:
    virtual void f1(){}
};

class Child : public Base
{
    public:
    virtual void f1(){}
};

int main()
{
	//去掉const
    const Base s;
    Base& p = const_cast(s);			// 不包错
    Base& p = reinterpret_cast(s);		//报错
    Base& p = dynamic_cast(s);			//报错
    
    Base& p = (Base &)(s);						//不报错

	// 添加const
	Base bb;
    // const Base &p = (const Base &)bb;            //成功
    // const Base &p = const_cast(bb);//成功
    // const Base &p = dynamic_cast(bb);     //成功
    // const Base &p = reinterpret_cast(bb);     //成功
    // const Base &p = static_cast(bb);     //成功
    return 0;
}
  1. reinterpret_cast
    用于不同类型指针之间、不同类型引用之间、整数和指针之间的转换,这种转换是逐bit的进行转换,转换的过程其实是可能会引发一些错误,在转换的过程中,程序是不会提示的。
    比如将基类指针转化为派生类指针,实际上就会产生错误、再或者没有多态的基类和派生类在派生类转换为基类的时候,其调用的函数都会是基类的函数,这回产生一些逻辑错误,这种错误实际上可以通dynamic_cast来进行避免。
  2. dynamic_cast
    可以对进行转化的指针、引用进行检查,如果出现错误的话,其返回的指针就会为空!在基类中没有实现多态的话,那么转化的过程中会直接编译不通过。所以dynamic_cast用于实现了多态的类
#include
using namespace std;

class Base
{
    public:
    int xx ;
    Base(){
        this->xx = 10;
    }
    virtual void f1(){}

};

class Child : public Base
{
    public:
    virtual void f1(){}
};

int main()
{
    Base * pb;
    Child * pc;
    Base b;
    Child c;
    // dynamic_cast<>
    // pb = reinterpret_cast(&c);
    pb = dynamic_cast(&c);
    if(pb == NULL)cout<<"派生类转化为基类错误"<(&b);
    pc = dynamic_cast(&b);
    if(pc == NULL)cout<<"基类转化为派生类出现错误"< 

参考自:
6. const_cast - 胖子许木木的文章 - 知乎
7. (C++ 成长记录) —— C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast) - 赵萱婷的文章 - 知乎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号