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

为何C++中push_back无需赋值,substr却需赋值才能生效?

问题解答

核心区别在于这两类字符串成员函数的设计逻辑完全不同:

1. push_back()是原地修改类函数

这类函数的作用是直接修改调用它的字符串对象本身:

  • 当你执行givenInput.push_back(addChar)时,函数会直接在givenInput这个字符串的末尾追加字符,原对象的内容被实时更新。
  • 所以函数执行完毕后,givenInput已经是修改后的状态,不需要额外赋值操作,直接输出就能看到新结果。

对应示例代码:

string givenInput;
char addChar;

getline(cin, givenInput);
cin >> addChar;

givenInput.push_back(addChar); // 直接修改givenInput本身
cout << givenInput << endl; // 输出修改后的原对象

2. substr()是返回新对象类函数

这类函数的作用是生成并返回一个全新的字符串对象,不会对调用它的原对象做任何修改:

  • 当你执行strVal.substr(beginIndex, selectionLen)时,函数会根据参数从strVal中截取目标子串,但原strVal的内容从头到尾完全不变,只是把生成的新子串作为返回值传递出来。
  • 如果不把这个返回值赋值给strVal(或者其他变量),这个新生成的子串就会被直接丢弃,原strVal还是最初的内容,自然输出不到你想要的子串。

对应示例代码:

string strVal;
int beginIndex;
int selectionLen;

getline(cin, strVal);
cin >> beginIndex;
cin >> selectionLen;

strVal = strVal.substr(beginIndex, selectionLen); // 将返回的新子串赋值给原变量,覆盖旧内容
cout << strVal << endl; // 输出更新后的变量

一句话总结

  • 原地修改类函数:直接改动自身,无需赋值
  • 返回新对象类函数:不碰原对象,必须接收返回值才能获取新内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:12