首页 > 其他 > 详细

DuiLib笔记之CDuiString的bug

时间:2019-02-23 22:25:16      阅读:199      评论:0      收藏:0      [点我收藏+]

在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中重载了()运算符

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

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

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

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

技术分享图片

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

DuiLib笔记之CDuiString的bug

原文:https://www.cnblogs.com/buyishi/p/10424331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!