zoukankan      html  css  js  c++  java
  • DuiLib笔记之CDuiString的bug

    在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==改为友元

  • 相关阅读:
    SQL*Loader-951错误
    excel导出
    zookeeper常见bug
    可编辑表格
    tree的应用
    join
    hibernate manytomany 双向
    hibernate 多对多 单向关联
    hibernate 一对多(多对一)双向
    hibernate one2many
  • 原文地址:https://www.cnblogs.com/buyishi/p/10424331.html
Copyright © 2011-2022 走看看