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中重载了()运算符
所以当"button"和controlName进行比较时
首先controlName会被转换为LPCTSTR类型的对象
然后本质上是两个指针在通过==进行比较
所以把字符串字面值置前进行比较,是有问题的
可以考虑修改CDuiString的源码,将成员operator==改为友元
标签:DuiLib,置前,TEXT,比较,controlName,CDuiString,bug 来源: https://www.cnblogs.com/buyishi/p/10424331.html