« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
|
[C/C++编程]C++风格的cast |
大隐于市 发表于 2005/5/27 0:12:29 |
C++风格的转型(cast)运算符有什么区别?C++除了C风格的转型运算(直接使用类型关键字)之外,提供了更加具体的转型控制,它们分为static_cast<>,dynamic_cast<>,const_cast<>,reinterpret_cast<>四种。它们具有类似模板的语法,但是实际上是运算符。static_cast用于内建数据类型之间的转型。dynamic_cast用于在继承体系中进行安全的向下转型(downcast),也就是从基类指针/引用向派生类指针/引用的转型。const_cast用于取消变量的常量性修饰。reinterpret_cast用于对变量重新进行二进制解释,因此它的转型结果是编译器实现相关(implementation-dependent)的,不是可移植的,一般在实践中,只有迫不得已,才使用这种转型。例如直接将整数常量转型为某个自定义的struct类型,驱动程序的编写中常常使用这种技术。概念上说,C风格的转型,大致相当于static_cast和const_cast,因为C中没有继承。C++中兼容的C风格转型,基本上按照上面介绍的顺序进行转型,但是对于继承体系中的向下转型,是不安全的,因为它总是试图强制转型,而不是在实际对象不满足转型要求时,转型失败。换句话说,dynamic_cast处理指针/引用时,如果实际的对象不是转型目标或者转型目标的派生类型,会得到空指针或者抛出异常(如果转型的是引用)。因此,在C++中,鼓励的编码风格是使用C++的转型运算符,不推荐使用C风格的转型。 | |
|
|
|
统计 |
blog名称:若望的天地 日志总数:30 评论数量:60 留言数量:0 访问次数:152315 建立时间:2005年5月25日 | |