C语言中四种强制类型转换的细微差别究竟有何本质区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1625个文字,预计阅读时间需要7分钟。
前言:C++ 支持C风格的类型转换,同时也有自己风格的类型转换。
C风格的转换格式非常简单,但存在不少缺陷:
1. 转换过于随意,可以在任意类型之间进行转换。
2.你可以将指向const对象的指针转换为指向非const对象的指针。
例如,你可以将一个指向const对象的指针转换为指向非const对象的指针。
前言
C++即支持C风格的类型转换,又有自己风格的类型转换。C风格的转换格式很简单,但是有不少缺点的:
1.转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。
2.C风格的转换没有统一的关键字和标示符。对于大型系统,做代码排查时容易遗漏和忽略。
C++风格完美的解决了上面两个问题。1.对类型转换做了细分,提供了四种不同类型转换,以支持不同需求的转换;2.类型转换有了统一的标示符,利于代码排查和检视。下面分别来介绍这四种转换:static_cast、dynamic_cast、const_cast和reinterpre_cast.
一、static_cast转换
1.基本用法:static_cast<type-id> expression
2.使用场景:
a、用于类层次结构中基类和派生类之间指针或引用的转换
上行转换(派生类---->基类)是安全的;
下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。
本文共计1625个文字,预计阅读时间需要7分钟。
前言:C++ 支持C风格的类型转换,同时也有自己风格的类型转换。
C风格的转换格式非常简单,但存在不少缺陷:
1. 转换过于随意,可以在任意类型之间进行转换。
2.你可以将指向const对象的指针转换为指向非const对象的指针。
例如,你可以将一个指向const对象的指针转换为指向非const对象的指针。
前言
C++即支持C风格的类型转换,又有自己风格的类型转换。C风格的转换格式很简单,但是有不少缺点的:
1.转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。
2.C风格的转换没有统一的关键字和标示符。对于大型系统,做代码排查时容易遗漏和忽略。
C++风格完美的解决了上面两个问题。1.对类型转换做了细分,提供了四种不同类型转换,以支持不同需求的转换;2.类型转换有了统一的标示符,利于代码排查和检视。下面分别来介绍这四种转换:static_cast、dynamic_cast、const_cast和reinterpre_cast.
一、static_cast转换
1.基本用法:static_cast<type-id> expression
2.使用场景:
a、用于类层次结构中基类和派生类之间指针或引用的转换
上行转换(派生类---->基类)是安全的;
下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。

