项目中看到这样的代码:

m_optimizedPolygons = false;
if (gdi_compatible && (true == gdi_compatible->value().as_boolean()))
        m_optimizedPolygons = true;

看到什么问题了吗?有没有人吐血身亡?哦,对不起,朋友,帮忙打个120......

无数C++的文章和书籍----至少,我已经数不清看到过多少次类似的讨论了----讨论了和true,false直接比较判等的陷阱,对于bool表达式,不能用==来比较,虽然语法上完全合法.

true 的内部表示是什么?1?-1?oxffffffff?非0?能确定的大概只有一点:非0;gdi_compatible->value(). as_boolean()返回值只有恰好和程序内部的true的表示相等,==比较的结果才是true.显然,as_boolean()并不能确定 true到底物理上怎么表示的,所以,也只是返回一个非0值了事.借助于强制转换很容易测试这一点:

int i = 10;

cout << static_cast<bool&>(i) == true;

输出多半是0,至少我在vc8上是这样,而这个项目使用的正是vc8.

尽管将一个整数转换成bool类型时,编译器可以动态调整内部表示,然而,这也只是在编译器能够判断时才能做出这种调整.例子中的这种情况是例外.另外一个例外是:

if (true == fun());

这个fun是外部模块,例如DLL,什么编译器编译的都不确定.更是无法预测了.

改正很简单:

m_optimizedPolygons = gdi_compatible && gdi_compatible->value().as_boolean();

既简单,又可靠,何乐而不为?

需要记住的是:

bool值之间只应该做bool运算,永远不要用来做其他运算--除非你知道。这里的bool值机包括内置的bool类型,更包括自定义的bool类型。特别的,对于windows中的BOOL类型,往往是内部的short, int8定义来的,这样的类型更危险:

if (foo1() == foo2())如果这两个返回值都是true,但是一个是3,另一个是4,都是true,却不相等, 呜呼哀哉!

今天在论坛看到一篇文章,<<奇技淫巧C++之懒惰计算>>,一看之下,原来是我写的,网上转悠了一圈又回到csdn来了.这年头,被人转载还要说一声"承您看得起咱",况且,写blog嘛,本来就有那么一点露阴癖的意思.只是,咱们既然露了,那看的人总该知道是谁在露是不是?

恐怖的代码,以及转载相关推荐

  1. 无师自通-自己学写脚本,小明外挂脚本代码教程 转载

    无师自通-自己学写脚本,小明外挂脚本代码教程 转载 2011-02-03 19:47:20| 分类: 石器脚本 assa | 标签:walkpos 指令 对话框 跳转 道具 |字号 订阅 下载LOFT ...

  2. 我,一个写代码的(转载)

    原文地址:我,一个写代码的(转载) 作者:依然 写blog已经快两年了,起初仅仅是为了自己"备个案",结果慢慢演变成为了"分享成瘾".前几天一个朋友给我的blo ...

  3. XGBoost参数调优完全指南(附Python代码)——转载

    转载自https://www.cnblogs.com/mfryf/p/6293814.html 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候, ...

  4. HDFS集中式的缓存管理原理与代码剖析--转载

    原文地址:http://yanbohappy.sinaapp.com/?p=468 Hadoop 2.3.0已经发布了,其中最大的亮点就是集中式的缓存管理(HDFS centralized cache ...

  5. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. Adaboost算法原理分析和实例+代码(转载)

    [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时 ...

  7. OpenCV单目视觉定位(测量)系统(新增 含代码)(转载)

    OpenCV单目视觉定位(测量)系统 The System of Vision Location with Signal Camera Abstract:This passage mainly des ...

  8. VML编辑器代码实现(转载)

    <HTML xmlns:v> <HEAD> <META http-equiv="Content-Type" content="text/ht ...

  9. 雨流计数法及matlab代码【转载】

    作者:杰出的杰出 来源:CSDN 原文:https://blog.csdn.net/u011391128/article/details/79551601 版权声明:本文为博主原创文章,转载请附上博文 ...

最新文章

  1. 电动助力转向EPS技术详解
  2. wordpress关闭博客评论的两种方法
  3. 关于idea使用SpringMVC配置正确却404问题及解决办法
  4. python学精通要多久-学Python编程难吗 从入门到精通学习Python要多久
  5. 巧用Mono.Cecil反射加载类型和方法信息
  6. python magic文档
  7. WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法
  8. mysql blob 内容查看_这些被你忽视的MySQL细节,可能会让你丢饭碗!
  9. Gym - 215177C 玩游戏
  10. 【HUAWEI Mate30】抽奖啦!华为IoT新福利上线!
  11. DongLiORM 介绍
  12. CSS设置居屏幕中间的弹出块
  13. 数据库sql语句杂谈
  14. Python 运算符(Operators)
  15. freebase使用总结
  16. Java编写图像浏览器_浏览器下载图像(JAVA代码)
  17. 网络维护类岗位做什么?
  18. 《数字逻辑设计与计算机组成》一 第3章 3.1 简介
  19. windows无法连接到打印机?三个方法连接打印机(Win10系统)
  20. java 实现汉字转换拼音_Java实现汉字转换为拼音

热门文章

  1. 嵌入式设备的switch 以及PHY 芯片调试和选型 (2)
  2. 白塞尔公式_如何设计像乌塞尔这样的800人的婚礼
  3. 春招秋招笔试面试时间(2020年)
  4. 电脑技术分享:电脑怎样录制桌面视频
  5. 2-快速攻破vuex五大核心-附案例源码
  6. redux中导入createStore中间有条线,解决方案及redux的使用。(react)
  7. 咱就是说,方言配音的软件能有多少
  8. web前端工作有哪些职业发展方向
  9. 多少人败给了一个字:等 ! 宋丹丹、梁静茹、张国荣。。。
  10. RedHat(RHEL)6.2 X64 Oracle11g X64 安装参考文档