You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中std::string关系运算符与string::compare()结果不一致问题

为什么std::string的<运算符和compare()字符串比较结果不同?

测试代码如下:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "100";
    cout << str.compare("10") << endl; // 输出1
    cout << ("100" < "10") << endl;     // 输出1
}

按字典序"100"应大于"10",所以("100" < "10")预期输出0,但实际输出1,而str.compare("10")的结果符合预期,核心原因是两种比较的本质完全不同:

1. ("100" < "10"):比较的是指针地址

"100"和"10"都是C风格字符串字面量,编译时会被存入内存的只读数据段。当用<比较它们时,编译器不会对比字符串内容,而是直接比较这两个字面量在内存中的指针地址。

在你的测试环境中,"100"的内存地址恰好小于"10"的地址,所以表达式返回true(输出1),这个结果和字符串的字典序没有任何关系。

2. str.compare("10"):逐字符比较字符串内容

std::string的compare()成员函数是专门用于字符串内容比较的:

  • 它会逐字符对比两个字符串,直到出现不同字符或其中一个字符串结束
  • 这里前两个字符'1'和'0'完全相同,"10"先结束,而"100"还有后续字符,因此判定"100"更大,返回大于0的整数(这里是1),符合字典序预期。

正确比较C风格字符串字面量的方法

如果要按字典序比较两个C风格字符串字面量,有两种可行方式:

  • 使用C标准库的strcmp函数:strcmp("100", "10"),返回值大于0表示前者更大
  • 将其中一个字面量转为std::string,触发std::string的关系运算符:std::string("100") < "10",此时会按内容比较,返回false(输出0)

内容的提问来源于stack exchange,提问作者router

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:31:13