关于bool "operator bool()"

surfeng_xiao 2012-10-27 12:24:16
bool IsOpen()
{
return hComm_ != INVALID_HANDLE_VALUE;
}
//! 判断串口是或打开
operator bool ()
{
return hComm_ != INVALID_HANDLE_VALUE;
}

其中
operator bool ()
{
return hComm_ != INVALID_HANDLE_VALUE;
}
是什么意思?是重载bool吗?
...全文
701 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2013-01-27
  • 打赏
  • 举报
回复
类型转换运算符。
Star-light 2013-01-27
  • 打赏
  • 举报
回复
就是可以视作bool 例子参见std::istream
xiaohuh421 2013-01-27
  • 打赏
  • 举报
回复
void fun(BOOL bOk) { } 这里错了, bool是小写, 习惯用大写那个定义了.
xiaohuh421 2013-01-27
  • 打赏
  • 举报
回复
这个是隐式类型转换. 有了这个操作符, 你就可以把这类的对象直接传到需要bool类型参数的地方. 比如你的类为: class MyCom { public: operator bool () { return hComm_ != INVALID_HANDLE_VALUE; } }; void fun(BOOL bOk) { } 可以有以下用法. MyCom com; fun(com); //这里就会调用 operator bool ()
引用 楼主 surfeng_xiao 的回复:
bool IsOpen() { return hComm_ != INVALID_HANDLE_VALUE; } //! 判断串口是或打开 operator bool () { return hComm_ != INVALID_HANDLE_VALUE; } 其中 operator bool () { return hComm_ != INV……
jackheroes 2013-01-25
  • 打赏
  • 举报
回复
引用 2 楼 virtualxmars 的回复:
不过,就你的代码来说,这样重载并不是一个好的实践。假设你的类名为Connection Connection connection; if (connection) { ...... } 当其它程序员看到这个条件语句时,无法肯定它的作用:到底是判断connection是否已经打开了呢,还是connection当前有数据可以接收,还是connection发生了异常? ……
这种用法应该是遵循STL规范的,if( cin ), if(cout).而且connection也是一个流. practice通常是"实践"的意思,但在C++更多表示的是"做法".
天子斌斌 2013-01-25
  • 打赏
  • 举报
回复
很好
virtualxmars 2012-10-27
  • 打赏
  • 举报
回复
不过,就你的代码来说,这样重载并不是一个好的实践。假设你的类名为Connection

Connection connection;

if (connection) {
......
}

当其它程序员看到这个条件语句时,无法肯定它的作用:到底是判断connection是否已经打开了呢,还是connection当前有数据可以接收,还是connection发生了异常?

所以,若非必要,或者一眼即明的情况,还是用能直接表达意图的方法能让代码更具可读、可维护性,如前面的 isOpen
virtualxmars 2012-10-27
  • 打赏
  • 举报
回复
指的是从对象到类型的转换

例如如果按你上面的定义,则可以写出下面的代码:

YourClass obj;

if (obj) {
// ....
}

对于没有重载operator bool的类来说,是不能用作条件判断语句的,反之,if(obj)中的obj会被转化为对operator bool的调用:
if (obj.operator bool()) {
....
}
surfeng_xiao 2012-10-27
  • 打赏
  • 举报
回复
非常感谢你的解释!这是一个串口通信头文件CnComm里的定义,看着有点糊涂,不过看了你的解释明白了很多,这样确实不太好,谢谢!

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧