push_back 是 string 专用于末尾添加单个 char 的成员函数,需传入字符字面量(如 'a')或 ASCII 整数,不可用字符串字面量;相比 += 和 append,它语义最清晰、效率高;大量追加时建议先 reserve 预分配空间。

push_back 是 string 的成员函数,直接调用即可
std::string 是可变长字符序列,它继承了容器的部分行为,push_back 就是其中之一,专门用于在末尾追加单个 char。不需要转换、不需要构造临时字符串,也不需要 += 或 append。
常见错误是误以为要传入字符串字面量(如 "a"),但 push_back 只接受 char 类型参数:
-
str.push_back('a')✅ 正确:单引号,char -
str.push_back("a")❌ 编译失败:双引号是const char*,类型不匹配 -
str.push_back(97)✅ 也可行:整数字面量隐式转为char(ASCII 值)
和 operator+=、append 比较:选哪个?
三者都能实现“加一个字符”,但语义和效率略有差异:
-
push_back(c):语义最清晰,专为单字符设计;内部通常无内存重分配判断开销(和operator+=底层常共用逻辑) -
str += c:也高效,且支持链式表达(如s += 'a' += 'b'),但本质是重载的operator+=,对单字符做了特化 -
str.append(1, c):功能冗余,多一次函数调用+参数解析,没必要
结论:加单字符就用 push_back 或 +=,别绕路。
立即学习“C++免费学习笔记(深入)”;
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
注意 capacity 和 reallocation 的实际影响
push_back 在容量不足时会自动扩容,但扩容策略(通常是 1.5× 或 2×)会导致潜在的性能抖动。如果你明确知道要追加大量字符,提前 reserve 更稳妥:
<pre class="brush:php;toolbar:false;">std::string s;
s.reserve(1024); // 预分配空间,避免多次 realloc
for (int i = 0; i < 1000; ++i) {
s.push_back('x');
}
没 reserve 也不报错,只是可能触发 5–10 次内存拷贝(取决于实现),高频循环中值得留意。
不能 push_back std::string 或 wchar_t
push_back 的参数类型固定为 char(对 std::string)或 wchar_t(对 std::wstring)。混用会编译失败:
-
s.push_back(std::string("hi")[0])✅ 可以,取出来是char -
s.push_back(L'a')❌ 错误:wchar_t无法隐式转char(除非显式 cast,但通常不该这么做) -
s.push_back("hello")❌ 类型不匹配,连编译都过不去
跨编码或拼接字符串,请改用 +=、append 或 insert。

















