在C/C++中,当使用==比较两个对象时,推荐的风格是将常量置前

例如

if (0 == variable)

{

  ...

}

但在DuiLib中,CDuiString存在一个bug:在用==进行比较时,把字符串字面值置前,并不能得到正确的比较结果

举个例子,对于这段代码

const CDuiString &controlName = msg.pSender->GetName();
if (TEXT("button") == controlName)
{
MessageBox(GetHWND(), TEXT("To win, to survive."), TEXT("为了胜利,为了生存。"), MB_ICONINFORMATION);
}
else
{
WindowImplBase::OnClick(msg);
}

由于CDuiString中使用了用户定义的转换(User-defined Conversion)

所以当"button"和controlName进行比较时

首先controlName会被转换为LPCTSTR类型的对象

然后本质上是两个指针在通过==进行比较

所以把字符串字面值置前进行比较,是有问题的

可以考虑修改CDuiString的源码,将成员operator==改为友元

DuiLib笔记之CDuiString的bug的更多相关文章

  1. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  2. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html  一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 ...

  3. DuiLib笔记之自定义标题栏以及响应按钮点击事件

    在博文DuiLib笔记,基于WindowImplBase的基础模板的基础上,修改皮肤文件如下 <?xml version="1.0" encoding="utf-8 ...

  4. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  5. 2 CDuiString的bug

    重温了一下 Effective C++,发现这就是条款24所指出的问题,看来读书百遍不如写代码一遍啊 在Notify处理消息时会有很多if语句,我通常喜欢把常量放在双等号前面,变量放在后面,比如:   ...

  6. AngularJS in Action读书笔记6(实战篇)——bug hunting

    这一系列文章感觉写的不好,思维跨度很大,原本是由于与<Angularjs in action>有种相见恨晚而激发要写点读后感之类的文章,但是在翻译或是阐述的时候还是会心有余而力不足,零零总 ...

  7. duilib修复ActiveXUI控件bug,以支持flash透明动态背景

    转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了 防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背 ...

  8. DuiLib笔记,基于WindowImplBase的基础模板

    Main.cpp #include <UIlib.h> using namespace DuiLib; class MainWindow : public WindowImplBase { ...

  9. 实战c++中的string系列--CDuiString和string的转换(duilib中的cduistring)

    使用所duilib的人定会知道cduistring类型,先看看这个类是怎么定义的: class UILIB_API CDuiString { public: enum { MAX_LOCAL_STRI ...

随机推荐

  1. 计算机图形——OpenGL

    荒废了太久,趁着"寒假"死磕了两周,验证了不少想法,解开了不少疑惑,代码质量当然是没有的,一切只为看到结果. 有空了再写每一项的细节. 源码地址 2019/5/12 更新 延迟渲染 ...

  2. doT.js-doT模板方便快捷的组织页面DOM

    重来没有想过,作为一个坐吃等死的前端也会有学习引擎模板的一天 都是被现实所逼呀.学习优秀代码时,一句一句翻译.忽然看到{{   }}这个包裹的代码.糟心了!看不懂,咋办?学呀!!!!!! 这是我开始学 ...

  3. 洛谷——P1657 选书

    P1657 选书 题目描述 学校放寒假时,信息学奥赛辅导老师有1,2,3……x本书,要分给参加培训的x个人,每人只能选一本书,但是每人有两本喜欢的书.老师事先让每个人将自己喜欢的书填写在一张表上.然后 ...

  4. array_map常用技巧

    array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组. 简单来说 “array_map” 会对数组中的每一项进行处理,并返回处理后的数据. 定 ...

  5. XCode 4.3 Unable to load persistent store UserDictionary.sqlite 以及 ios simulator failed to install the application

    I have been working on an iOS app for some time, all of a sudden I am getting the following crash ev ...

  6. DevExpress打印功能介绍 z

    一.打印功能说明: 打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法. (1).使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行 ...

  7. 【Tensorflow】tf.argmax函数

    tf.argmax(input, axis=None, name=None, dimension=None) 此函数是对矩阵按行或列计算最大值   参数 input:输入Tensor axis:0表示 ...

  8. Linux进程管理(3):总结

    7. exit与_exit的差异    为了理解这两个系统调用的差异,先来讨论文件内存缓存区的问题. 在linux中,标准输入输出(I/O)函数都是作为文件来处理.对应于打开的每个文件,在内存中都有对 ...

  9. Shadow Map阴影贴图技术之探 【转】

    这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本 ...

  10. Opencv 改进的外接矩形合并拼接方法

    上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include <open ...