为什么 std:string 在比较相同文本的子字符串时不返回 0?

Why is std:string not returning 0 on comparing sub strings of same text?

这可能是一些简单的疏忽,但我对为什么在以下代码中第二次比较不 return 0 感到困惑:

#include <iostream>

int main()
{
    std::string text =  "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
    std::string text2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

    int result = text2.compare(text);

    if (result == 0)
    {
        std::cout << "strings same" << std::endl;
    }
    else
    {
        std::cout << "strings NOT same" << std::endl;
    }

    result = text2.compare(0, 10, text);

    if (result == 0)
    {
        std::cout << "strings same" << std::endl;
    }
    else
    {
        std::cout << "strings NOT same" << std::endl;
    }
}

因为compare函数在传入pos & len参数时,将整个第一个字符串与第二个字符串进行比较。第一个字符串比您正在比较的第二个字符串的一部分长。

如果您还对第一个字符串进行子字符串化,那么它将 return 为真

result = text2.compare(0, 10, text, 0, 10);

上面的调用调用了这个重载

int compare (size_t pos, size_t len, const string& str,
         size_t subpos, size_t sublen) const;

subpos 和 sublen 是要比较的第一个字符串的 pos 和长度。