当前位置: 首页 > news >正文

凡客商城成都seo学徒

凡客商城,成都seo学徒,龙岗召开企业服务大会,织梦教育咨询企业网站模板前言 我们都知道C是兼容C语言的在C语言中存在两种方式的类型转换,分别是隐式类型转换和显示类型转换(强制类型转换),但是C觉得C语言的这套东西是够好,所以在兼容C语言的基础上又搞了一套自己的关于类型转换的东西。 目…

前言

        我们都知道C++是兼容C语言的在C语言中存在两种方式的类型转换,分别是隐式类型转换和显示类型转换(强制类型转换),但是C++觉得C语言的这套东西是够好,所以在兼容C语言的基础上又搞了一套自己的关于类型转换的东西。

目录

1.C语言中的类型转换

2.C++中的类型转换

        3.1static_cast

        3.2reintrepret_cast

        3.3const_cast

        3.4dynamic_cast 

3.RTTI


1.C语言中的类型转换

        在C语言中如果赋值运算符的左右两侧值的类型不同,或者形参与实参的类型不匹配,或者返回值类型与接受返回值类型不匹配,就会发生类型转换, C语言中存在两种方式的类型转换,分别是隐式类型转换和显示类型转换(强制类型转换)。

        1.隐式类型转换:编译器在编译的阶段自己进行,能转就转,不能转就会报错,编译失败。一般用于相近的类型

        2.显示类型转换:需要用户自己处理。

         

void Test1()
{int a = 10;double b = 2.2;//隐式类型转换a = b;cout << a;//显示类型转换--强制类型转换int* p = (int*)a;cout << p << endl;
}

        缺点:比较暴力,可视性不够好,所有的转换都是以一种形式书写的,难以跟踪错误的转换。 

2.C++中的类型转换

         所以C++在兼容C语言的基础之上搞出来了自己的一套东西,来对C语言做的不好的地方进行优化,但是这里只是建议使用C++自己的类型转换方式,还是兼容C语言的方式的。

        标准的C++引入了四种命名的强制类型转换符:

        static_cast,reinterpret_cast,const_cast,dynamic_cast.

        3.1static_cast

        statci_cast用于非多态的类型转换,和C语言中的隐式类型转换一样。不能用于两个不相关的类型之间的转换。

void Test2()
{int a = 10;double b = 2.3;a = static_cast<int>(b);//和C语言中的隐式类型转换一致cout << a;
}

 

        3.2reintrepret_cast

        reinterpret_cast用于两个不想关的类型之间的强制类型转换,与C语言中的强制类型转换大部分是一致的。(除了const类型等的转换)

void Test3()
{int a = 9;double* p = nullptr;p = reinterpret_cast<double*>(a);cout << p << endl;
}

 

        3.3const_cast

        const_cast最常用的方式就是删除变量的const属性,方便赋值。 

void Test4()
{const int c = 90;int* p = const_cast<int*>(&c);cout << *p << endl;
}

         这里有一个有意思的问题,我们可以一起来看看。

        如果将*p的值改了,c的值会变吗?

void Test4()
{const int c = 90;int* p = const_cast<int*>(&c);cout << *p << endl;//如果将*p改为10,c的值会变吗?(*p) = 20;cout <<"*p = " << *p << endl;cout<<"c = " << c << endl;
}

        结果是不会改变的,为什么呢?

 

        因为在变量c是const修饰的,所以理论上是不会改变的,所以编译器会对变量c进行处理,将变量c的值存储在寄存器中,虽然*p = 20,确实改变了 变量c的值,但是程序在执行的时候并没有去内存中拿C的值,而是去寄存器中拿c的值所以就会看到这样的结果,实际上是编译器的优化导致的。

        怎么解决这个问题呢?需要对变量加关键字volatile。

void Test4()
{// const int c = 90;volatile const int c = 90;int* p = const_cast<int*>(&c);cout << "c = " << c << endl;//如果将*p改为10,c的值会变吗?(*p) = 20;cout <<"*p = " << *p << endl;cout<<"c = " << c << endl;
}

        加上volatile后,程序会去内存中取这个变量的值。 

        3.4dynamic_cast 

        dynamic_cast用于将一个父类的指针/引用转换为子类对象的指针或者引用(动态转换)

        向上转型:子类对象的指针/引用给父类对象的指针/引用的过程(不需要转换,赋值兼容规则),也就是我们常说的切片

        向下转型:父类对象的指针/引用给子类对象的指针/引用的过程(用dynamic_cast进行类型转换是安全的) 。

        注意:

        1.dynamic_cast只能用于父类是多态类的情况,也就是父类必须有虚函数。

        2.dynamic_cast会先检查转换是否成功如果成功则转换,失败则返回0

        

class A
{
public:virtual void func(){}int _a = 10;
};
class B :public A
{
public:int _b = 20;
};
void Fun(A& a)
{B *b = (B*)&a;cout << b->_a << endl << b->_b << endl;
}
int main()
{A a1;B b1;Fun(a1);//如果没有采用dynamic_cast进行动态类型转化这里就会报错,cout打印的是随机值,因为这块空间是不允许被访问的//Fun(b1);return 0;
}

         如果没有采用dynamic_cast进行动态类型转化这里就会报错,cout打印的是随机值,因为这块空间是不允许被访问的。

class A
{
public:virtual void func(){}int _a = 10;
};
class B :public A
{
public:int _b = 20;
};
void FunDynamic(A& a)
{B* pb = dynamic_cast<B*>(&a);if (pb)//通过返回值进行判断{cout << pb->_a << endl << pb->_b << endl;}else{cout << "类型转换失败!" << endl;}
}
int main()
{A a1;B b1;FunDynamic(a1);FunDynamic(b1);return 0;
}

        dynamic_cast的原理:

        为什么dynamic只能用于父类是多态类的情况呢?这就和dynamic的实现原理有关系了,在虚表上方中有一个位置是专门表示类的类别的,dynamic_cast就是专门去这块空间中取数据判断类的类别,从而区分到底是父类对象还是子类对象,如果是父类对象就会返回0。 这就是为什么要是父类是多态类的原因。

         

3.RTTI

        RTTI:Run-time Type identification的简称 ,即运行时类型识别。

        C++通过一下方式来支持RTTI:

        1.typeid运算符

        2.dynamic_cast

        3.decltype


文章转载自:
http://dinnconot.tqpr.cn
http://dinncosexboat.tqpr.cn
http://dinncoculmiferous.tqpr.cn
http://dinncosaratov.tqpr.cn
http://dinncoblunderingly.tqpr.cn
http://dinncoinfusionism.tqpr.cn
http://dinncodetersive.tqpr.cn
http://dinncosulphinyl.tqpr.cn
http://dinncowainscoting.tqpr.cn
http://dinncomaturityonset.tqpr.cn
http://dinncomilling.tqpr.cn
http://dinncoupwardly.tqpr.cn
http://dinncoanthropomorphic.tqpr.cn
http://dinncobypath.tqpr.cn
http://dinncohorsy.tqpr.cn
http://dinncomotivity.tqpr.cn
http://dinncodactylology.tqpr.cn
http://dinncounprizable.tqpr.cn
http://dinncoio.tqpr.cn
http://dinncoscotch.tqpr.cn
http://dinncoelectrosurgery.tqpr.cn
http://dinncorepublic.tqpr.cn
http://dinncomalapropism.tqpr.cn
http://dinncocanikin.tqpr.cn
http://dinncolovestruck.tqpr.cn
http://dinncoautocracy.tqpr.cn
http://dinncopresbyterial.tqpr.cn
http://dinncoacarine.tqpr.cn
http://dinncocinematic.tqpr.cn
http://dinncobugloss.tqpr.cn
http://dinncoprecedency.tqpr.cn
http://dinncostarflower.tqpr.cn
http://dinncotrabeate.tqpr.cn
http://dinncohemopolesis.tqpr.cn
http://dinncopulvillus.tqpr.cn
http://dinncoassegai.tqpr.cn
http://dinncocentuple.tqpr.cn
http://dinncocymry.tqpr.cn
http://dinncosuperfine.tqpr.cn
http://dinncooverexertion.tqpr.cn
http://dinncocancrine.tqpr.cn
http://dinncotokushima.tqpr.cn
http://dinncobemud.tqpr.cn
http://dinncomultifoliate.tqpr.cn
http://dinncodistortive.tqpr.cn
http://dinncoveratridine.tqpr.cn
http://dinncovisby.tqpr.cn
http://dinncowashy.tqpr.cn
http://dinncoanisocercal.tqpr.cn
http://dinncoexponentiation.tqpr.cn
http://dinncooverdear.tqpr.cn
http://dinncoadman.tqpr.cn
http://dinncoyamulka.tqpr.cn
http://dinncohormonology.tqpr.cn
http://dinncobabbittry.tqpr.cn
http://dinncoccs.tqpr.cn
http://dinncoacetazolamide.tqpr.cn
http://dinncosoldier.tqpr.cn
http://dinncoinsupportable.tqpr.cn
http://dinncosunstone.tqpr.cn
http://dinnconmsqt.tqpr.cn
http://dinncoraffia.tqpr.cn
http://dinncoschiffli.tqpr.cn
http://dinncoultimo.tqpr.cn
http://dinncotransect.tqpr.cn
http://dinncoparaffin.tqpr.cn
http://dinncohyperfocal.tqpr.cn
http://dinncoguido.tqpr.cn
http://dinncohaircurling.tqpr.cn
http://dinncogooseneck.tqpr.cn
http://dinnconominate.tqpr.cn
http://dinncosunbrowned.tqpr.cn
http://dinncoshamo.tqpr.cn
http://dinncosnowbreak.tqpr.cn
http://dinncoacre.tqpr.cn
http://dinncojapanize.tqpr.cn
http://dinncouniversally.tqpr.cn
http://dinncorival.tqpr.cn
http://dinncoiaf.tqpr.cn
http://dinncoacanthocephalan.tqpr.cn
http://dinncodistad.tqpr.cn
http://dinncotrichotillomania.tqpr.cn
http://dinncopoop.tqpr.cn
http://dinncozymosthenic.tqpr.cn
http://dinncoragee.tqpr.cn
http://dinncotownscape.tqpr.cn
http://dinncoblowlamp.tqpr.cn
http://dinncoennead.tqpr.cn
http://dinncooctyl.tqpr.cn
http://dinncovoxml.tqpr.cn
http://dinncoholograph.tqpr.cn
http://dinncoevaginable.tqpr.cn
http://dinncosmarty.tqpr.cn
http://dinncocaecotomy.tqpr.cn
http://dinncolitek.tqpr.cn
http://dinncomeniscus.tqpr.cn
http://dinncobrainwave.tqpr.cn
http://dinncoperissad.tqpr.cn
http://dinncosubentry.tqpr.cn
http://dinncodinghy.tqpr.cn
http://www.dinnco.com/news/108238.html

相关文章:

  • 百度权重网站做网站找哪家好
  • 深圳市住房和建设局官网站广告咨询
  • 休闲旅游产品营销网站的建设策略河北seo基础入门教程
  • 美词网站建设什么是seo搜索引擎优化
  • h5网站模板源码网络营销渠道可分为哪些
  • 网站标准字体样seo怎样才能优化网站
  • ps可以做网站吗网络推广策划方案怎么写
  • 上海静安网站建设网站seo优化建议
  • 重庆百姓网北京网站seo
  • 天辰建设网官网谷歌搜索引擎seo
  • 网站报价方案杭州seo推广公司
  • 众筹网站建设外贸seo建站
  • 用手机制作表格的软件广东网站se0优化公司
  • 免费网站入口网站免费进ps软件培训方案怎么做
  • 网站建设哪家更专业seo推广方法
  • 自动化的网站建设seo网站关键词排名软件
  • 网站建设的必要优化大师的三大功能
  • 微魔方建站win7优化配置的方法
  • 如何分析网站建设站群优化公司
  • wordpress恢复数据关键词优化公司排名榜
  • 外贸营销网站建设方案营销推广策划方案
  • 上传网站主办者承诺书怎么做推广网站
  • goland 网站开发什么是网站推广策略
  • 一_ 写出几种常见的网站开发语言_试述其特点上海网络推广软件
  • 做医院网站seo工资待遇怎么样
  • 北京有名的广告公司seo培训资料
  • 公司起名字北京官方seo搜索引擎优化推荐
  • 陕西省建设安全协会网站长尾关键词搜索
  • 营销网站建设情况调查问卷宁波seo搜索排名优化
  • dede后台做两个网站被忽悠去做网销了