WTF之隐式布尔类型转换

来源:互联网 发布:360软件下载大全 编辑:程序博客网 时间:2024/04/30 09:14

原文:http://blog.sina.com.cn/s/blog_71b5e2520100qxhu.html

在webkit中经常会看到类似于如下的代码: 

 // This conversion operator allows implicit conversion to bool but not to other integer types.
 1. typedef T* (RefPtr::*UnspecifiedBoolType);
 2. operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0; }

 [代码摘录于:WebKit\Source\JavaScriptCore\wtf\RefPtr.h]

 

该段代码的作用是,隐式布尔类型转换,即当RefPtr在条件表达式中求值时,依赖于其成员m_ptr是否为空。下面来分析一下这两行代码:

 

第1行,利用typdef定义了UnspecifiedBoolType类型,该类型是一个指向成员的指针类型。在这里它指向RefPtr的成员,该成员的类型为T*。

第2行,是个用户自定义转换函数,将RefPtr类类型转换为UnspecifiedBoolType类型,其转换意义是,返回RefPtr::m_ptr的地址。

 

这里利用指向成员的指针,一方面,如代码中的注释所言,避免了隐式转换为其他整型类型;另一方面,指向成员的指针不能隐式或显示转换为常规的指针类型,所以避免了如下问题:

RefPtr<SomeType> s;

delete s;

 

相关资料:

1.《Imperfect C++》第24章对operator bool()有详细介绍 

原创粉丝点击