设为首页 加入收藏

TOP

15.5 类型转换运算符(1)
2013-10-07 15:44:44 来源: 作者: 【 】 浏览:96
Tags:15.5 类型 转换 运算

15.5  类型转换运算符(1)

C++(www.cppentry.com)的创始人Bjarne Stroustrup看来,C语言中的类型转换运算符太过松散。例如,请看下面的代码:

 

首先,上述3种类型转换中,哪一种有意义?除非不讲理,否则它们中没有一个是有意义的。其次,这3种类型转换中哪种是允许的呢?在C语言中都是允许的。

对于这种松散情况,Stroustrop采取的措施是,更严格地限制允许的类型转换,并添加4个类型转换运算符,使转换过程更规范:

dynamic_cast;

const_cast;

static_cast;

reinterpret_cast。

可以根据目的选择一个适合的运算符,而不是使用通用的类型转换。这指出了进行类型转换的原因,并让编译器能够检查程序的行为是否与设计者想法吻合。

dynamic_cast运算符已经在前面介绍过了。总之,假设High和Low是两个类,而ph和pl的类型分别为High *和Low *,则仅当Low是High的可访问基类(直接或间接)时,下面的语句才将一个Low*指针赋给pl:

 

否则,该语句将空指针赋给pl。通常,该运算符的语法如下:

 

该运算符的用途是,使得能够在类层次结构中进行向上转换(由于is-a关系,这样的类型转换是安全的),而不允许其他转换。

const_cast运算符用于执行只有一种用途的类型转换,即改变值为const或volatile,其语法与dynamic_cast运算符相同:

 

如果类型的其他方面也被修改,则上述类型转换将出错。也就是说,除了const或volatile特征(有或无)可以不同外,type_name和expression的类型必须相同。再次假设High和Low是两个类:

 

第一个类型转换使得*pb成为一个可用于修改bar对象值的指针,它删除const标签。第二个类型转换是非法的,因为它同时尝试将类型从const High *改为const Low *。

提供该运算符的原因是,有时候可能需要这样一个值,它在大多数时候是常量,而有时又是可以修改的。在这种情况下,可以将这个值声明为const,并在需要修改它的时候,使用const_cast。这也可以通过通用类型转换来实现,但通用转换也可能同时改变类型:

 


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.5 类型转换运算符(2) 下一篇15.3.9 异常、类和继承(4)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)