c++ - std::string == 运算符不工作

标签 c++ string stl

多年来,我一直在 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 进行构建。

有什么想法吗?它看起来对我来说完全有效。

保罗

最佳答案

我几乎看不出您的代码有任何问题。看来 bug 的根源在别处。

我猜你返回了局部变量的引用。

看我的例子:

#include <iostream>

using std::string;

const string& getString()
{
    string text("abc");
    return text;
}

int main() {
    string text("abc");
    std::cout << (getString() == text ? "True" : "False") << "\n";
    return 0;
};

我机器上的输出:

False

但是我在某些环境中遇到异常输出。它是无效代码,但未定义行为。显然,它通常可以正常工作。

注意编译警告,例如:

a.cpp:7: warning: reference to local variable ‘text’ returned

您也可以尝试使用“-Wall”选项编译您的代码,并查看警告是否表明存在任何实际问题。

关于c++ - std::string == 运算符不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812136/

相关文章:

c++ - 为什么构造函数调用构造函数会产生奇怪的结果?

c++ - 将二叉搜索树导出到 .csv 文件

c++ - SHGetFolderPath 在分发版本中返回垃圾字符串

python - 在 Python-Fu 中,将字符串包装在 N_() 中有何作用?

c++ - 无法将右值 std::array 转换为 std::span

c++ - 我似乎无法弄清楚我的代码出了什么问题,我无法获得输出

c++ - 在 Visual Studio 2012 中为 C++ CLR 支持的 DLL 项目将 .NET Framework 4.5 降级到 4?

在 C(不是 C++)中将字符串转换为数字,反之亦然

c++ - STLportd.5.2.dll 和 STLportSTLd.5.2.dll 有什么区别?

c++ - 并行填充 vector ,顺序不重要