c++类型转换是什么?

 我来答
Zoie17980
2021-09-04 · TA获得超过2.6万个赞
知道小有建树答主
回答量:545
采纳率:100%
帮助的人:17万
展开全部

1、static_cast:可以实现C++中内置基本数据类型之间的相互转换,enum、struct、 int、char、float等。它不能进行无关类型(如非基类和子类)指针之间的转换。

2、const_cast:const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。

3、reinterpret_cast:(interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。)有着和C风格的强制转换同样的能力。它可以转化任何内置的数据类型为其他任何的数据类型,也可以转化任何指针类型为其他的类型。它甚至可以转化内置的数据类型为指针,无须考虑类型安全或者常量的情形。不到万不得已绝对不用。

4、dynamic_cast:

(1)其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。

(2)不能用于内置的基本数据类型的强制转换。

(3)dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

(4)使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过。需要检测有虚函数的原因:类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。 这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表(关于虚函数表的概念,详细可见<Inside c++ object model>)中,只有定义了虚函数的类才有虚函数表。

(5)在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换 时,dynamic_cast具有类型检查的功能,比 static_cast更安全。向上转换即为指向子类对象的向下转换,即将父类指针转化子类指针。向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。

c++类型转换的原因:

c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非 const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区 分这些。

还有一个缺点就是,c风格的转换不容易查找,他由一个括号加上一个标识符组成,而这样的东西在c++程序里一大堆。所以c++为了克服这些缺点,引进了4种类型转换操作符。

听不清啊
高粉答主

2021-12-21 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
当参与运算的数据的类型不相同时,必须要先将它们转换成同一类型,然后再进行运算。C语言中的类型转换有的可以由系统自动完成,称为自动类型转换,有的则需要程序员编写代码进行转换,称为强制类型转换。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小xun爱健身

2021-12-27 · 记录美好生活瞬间吧!
小xun爱健身
采纳数:41 获赞数:40

向TA提问 私信TA
展开全部
  1. reinterpreter_cast    重新解释类型转换。    

  2. dynamic_cast    子类和父类之间的多态类型转换。    

  3. const_cast    去掉const属性转换 。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
程序小冰

2021-12-05 · 程序爱好者,与诸位共同进步
程序小冰
采纳数:340 获赞数:480

向TA提问 私信TA
展开全部
就是将变量的类型进行相对应的转化啊,比如整数类型与浮点数类型的互换,字符串类型跟整数类型的互换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式