【发布时间】:2010-05-11 15:47:25
【问题描述】:
多年来,我一直在 windows 和 linux 上使用 std::string 的 == 运算符。现在我正在 linux 上编译我的一个库,它大量使用 ==。在 linux 上,以下函数失败,因为 == 即使字符串相等(区分大小写相等)也会返回 false
const Data* DataBase::getDataByName( const std::string& name ) const
{
for ( unsigned int i = 0 ; i < m_dataList.getNum() ; i++ )
{
if ( m_dataList.get(i)->getName() == name )
{
return m_dataList.get(i);
}
}
return NULL;
}
getName()方法声明如下
virtual const std::string& getName() const;
我正在使用 gcc 4.4.1 和 libstdc++44-4.4.1 构建。
有什么想法吗?对我来说它看起来完全有效。
保罗
【问题讨论】:
-
简单说明:std::string tmpStr1 = name; std::string tmpStr2 = m_dataList.get(i)->getName() ; if ( tmpStr1 == tmpStr2 ) ... 这可以正常工作。
-
getName 返回一个引用。参考仍然有效吗?
-
无法判断给定代码有什么问题。错误在别处。 Data::getName() 的代码呢?另一个可能性是您意外覆盖了 operator==() 您是否尝试过进入它以确保您使用的是标准实现?
-
@Aprogrammer,请添加一个扩展您评论的答案。这可能是正确的答案,但如果没有例子,其他人可能看不到。
-
我认为保罗的评论排除了简单的过时引用。比较对象的副本应该与比较对象的工作方式相同。这听起来像是某种编译器或库错误。如果是这样,我的建议是打开调试,尝试重现并单步执行库。如果没有,请戴上手套并尝试找出触发它的优化。