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

对空std::string调用insert(0,字符串):未定义行为还是合法行为?

std::string insert(0, ...) 的行为解析

先看你给出的代码:

int main() {
  std::string s;
  s.insert(0, "123");
}

你原本预期这段代码会抛出如下异常:

libc++abi: terminating due to uncaught exception of type std::out_of_range: basic_string

但实际编译运行后得到了符合预期的结果,想确认这是合法行为还是未定义行为。

答案很明确:这是完全合法的标准行为,不属于未定义行为。

根据C++标准对basic_string::insert的规定,插入位置参数pos的合法取值范围是 0 ≤ pos ≤ size()。对于空字符串来说,size()的值是0,所以pos=0刚好落在合法区间内(等于size()的情况也是允许的,对应在字符串末尾插入,而空串的末尾和开头是同一个位置)。

只有当pos > size()时,这个函数才会抛出std::out_of_range异常。你之前的预期错误,是混淆了插入位置的合法上限——pos等于size()是完全合规的,并不会触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:48:11