在C++中,++i(前缀递增)和 i++(后缀递增)的主要区别在于返回值和性能。
返回值不同
++i:先递增,后返回值(返回递增后的值)i++:先返回值,后递增(返回递增前的值)
int i = 5;
int a = ++i; // i先变成6,然后a被赋值为6
int b = i++; // b被赋值为6,然后i变成7
性能差异
对于内置类型(int, float等)
性能相同,编译器会优化成相同的机器代码。
对于自定义类型(类对象)
++i更高效,因为:
// 前缀递增(更高效)
T& T::operator++() {
// 直接修改当前对象
// 返回*this的引用
return *this;
}
// 后缀递增(效率较低)
T T::operator++(int) {
T temp = *this; // 需要创建临时对象
++*this; // 调用前缀递增
return temp; // 返回临时对象(可能涉及拷贝)
}
示例代码
#include <iostream>
#include <vector>
int main() {
// 示例1:内置类型
int i = 0;
std::cout << "前缀: " << ++i << std::endl; // 输出1
std::cout << "后缀: " << i++ << std::endl; // 输出1,但i变成2
// 示例2:在循环中的使用
std::vector<int> vec = {1, 2, 3, 4, 5};
// 推荐:使用前缀递增
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
return0;
}
实战
- 循环中优先使用
++i - 对于自定义类型,总是使用
++i - 只有当需要原始值时使用
i++
// 好习惯
for (int i = 0; i < n; ++i) {
// 使用前缀递增
}
// 需要原始值的情况
int i = 5;
int current = i++; // current=5, i=6(更建议分两步写代码,代码更清晰)
总结
在大多数情况下,特别是循环和自定义类型中,建议优先使用 ++i。
现在不少朋友都在准备校招或跳槽,常规的技术学习只是提高了代码能力,还没有提升从 0 到 1 整体做项目和解决问题的能力!
为此我们特别推出了C++训练营,带着你从 0 到 1 做 C++ 项目(你可以从项目池中任选项目),帮助你提升做项目的能力,提升从0到1的能力,熟悉做项目的完整流程,比如
开发环境、编译脚本、架构设计、框架搭建、代码发布、问题调试、单元测试。

除了上面的,还有需求分析、项目规划、架构设计、任务拆解、时间规划、版本管理。另外做项目的过程中必然会遇到种种问题,可以逐步提升你的调试能力,分析问题的能力,掌握更多的调试手段。
遇到棘手的问题,我们还有专门的导师1V1答疑解惑,给出具体建议。
项目池里面的项目,是导师团队花费大量时间完成的,不仅有完整的代码及清晰的注释还有详细的文档和视频,并且有专门的项目导师答疑,完全不用担心自己学不会。
相信我,这些项目绝对能够让你进步巨大!下面是其中某几个项目的说明文档

对训练营感兴趣的同学,可以看这篇文章了解训练营详情(也可直接点击阅读原文)。C++训练营来了👈
训练营适用人群:
- 备战春招和秋招的应届生,科班非科班均可,
- 工作 3 年以内,想跳槽的社招同学
- 如果你有以下困扰,欢迎联系我们,我们愿意为你提供帮助和支持
- 不知道该复习哪些内容,如何开始复习。
- 对面试考察重点不清楚,复习效率低下。
- 缺乏有含金量的实战项目经验。
- 想要提升自己的实战能力,提升做项目及解决问题的能力
- 对算法题无从下手,缺乏解题思路和常见解题模板。
- 自控力不足,难以专注于系统复习。
- 希望获得大厂的内推机会。
- 独自备战校招社招感到孤单,想要找到学习伙伴。
不适合人群:
- 缺乏耐心和毅力,急于求成的人
- 对编程逻辑思维基础薄弱,且不愿努力提升的人
- 只想快速获得成果而不注重基础学习的人
评论区
登录后即可参与讨论
立即登录