在C语言就已经存在了类型转化,但是转换其中的一些类型转换存在一些问题,所以C++在C语言的基础上又添加了属于自己的类型转换,下面我们一起来看看吧 。
在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:
隐式类型转换和显式类型转换。
void Test(){B b;A1* pa1 = &b;A2* pa2 = &b;cout << pa1 << endl;cout << pa2 << endl << endl;B* pb1 = (B*)pa1;B* pb2 = (B*)pa2;cout << pb1 << endl;cout << pb2 << endl << endl;B* pb3 = dynamic_cast (pa1);B* pb4 = dynamic_cast (pa2);cout << pb3 << endl;cout << pb4 << endl << endl;return 0;}
我们来观察一下上面关于地址的转换输出结果有什么特点。
我们可以看到在最开始pa1和pa2地址是不同的,这个也很容易理解,因为发生了切片,所以最后地址也是不同的。
但是类型后面我们对两个父类的地址进行强制类型转换,转换为子类地址,无论是C语言的强制类型转换,还是C++的类型转换,最后的地址都是相同的 。
注意
强制类型转换关闭或挂起了正常的转换类型检查,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用域,以减少发生错误的机会。强烈建议:避免使用强制类型转换
RTTI: Run-time Type identification 的类型简称,即:运行时类型识别
C++通过以下方式来支持RTTI
1.typeid运算符:获取对象类型字符串
2.dynamic_cast运算符:父类的指针指向父类对象,还是子类对象
3.decltype:推导一个对象类型,这个类型可以用来定义另一个对象
关于C++的类型转换到这里就已经讲解完毕了,在我们平时敲代码的过程中还是要让自己的代码更加规范一些,这样就可以避免很多的错误,也希望小伙伴们能从之前C语言的代码习惯改变过来,以C++的规范来写代码 。
chatgpt免费软件,转换chatgpt api 免费接口,chatgpt 聊天机器人教程,chatgpt 指令大全,chatgpt app
该工具全自动化,详解预计2023年年底会开发完成,包含