![]()
八股文学习网站:https://interviewguide.cn
在大多数编程语言中都有++i和i++,后续代码拿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。
好文推荐
你好,我是阿秀,普通学校毕业,校招时拿到字节跳动SP、百度、华为、农业银行等6个互联网中大厂offer,这是我在校期间的编程学习之路,点击蓝字即可查看我是如何自学技术以应对第二年的校招的全过程。
毕业后我先于抖音部门担任全栈开发工程师,目前在上海某外企带领团队继续从事全栈开发,负责的项目已经顺利盈利300w+。在研三那年就组建了一个阿秀的学习圈,持续分享校招/社招跳槽找工作的经验,目前已经累计服务22、23、24、25、26届同学,共计超过 4400 +人,欢迎点此🔗加入我们,一群人才能走的更远、更稳、更顺。

