C++中std::string三种范围for循环的差异及使用场景咨询
std::string范围for循环的区别解析
for (char c : s):
每次迭代都会将字符串s中的当前字符拷贝到临时变量c中。对c的任何修改都不会影响原字符串s,因为操作的只是副本,而非原字符串的元素。for (char& c : s):c是原字符串对应字符的非const引用,直接绑定到s的元素上。对c的修改会直接同步到原字符串s中,而且没有拷贝元素的开销。
你的理解是对的:第一种循环确实会拷贝每个元素,第二种使用的是引用。
如果不需要修改字符串的元素,更推荐使用for (const char& c : s),原因如下:
- 避免拷贝带来的性能开销(尽管
char的拷贝成本极低,但这种写法对更大、拷贝成本更高的类型同样适用,是良好的编程习惯) - 通过
const明确传递“不会修改元素”的代码意图,提升可读性,同时编译器会帮你拦截误修改元素的操作。
当然,仅针对char类型,for (char c : s)在性能上几乎没有差异,但const char&是更规范、更具扩展性的写法。
内容的提问来源于stack exchange,提问作者user8393252
相关产品推荐
相关产品推荐

