++i和i++的区别?哪种更高效?

来源:程序喵大人 嵌入式 11 次阅读
摘要:在C++中,++i(前缀递增)和 i++(后缀递增)的主要区别在于返回值和性能。 返回值不同 ++i:先递增,后返回值(返回递增后的值) i++:先返回值,后递增(返回递增前的值) int i = 5; int a = ++i; // i先变成6,然后a被赋值为6 int b = i++; // b被赋值为6,然后i变成7 性能差异 对于内置类型(int, float等) 性能相同,编译器会优

在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;
}

实战

  1. 循环中优先使用 ++i
  2. 对于自定义类型,总是使用 ++i
  3. 只有当需要原始值时使用 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 年以内,想跳槽的社招同学
  • 如果你有以下困扰,欢迎联系我们,我们愿意为你提供帮助和支持
  • 不知道该复习哪些内容,如何开始复习。
  • 对面试考察重点不清楚,复习效率低下。
  • 缺乏有含金量的实战项目经验。
  • 想要提升自己的实战能力,提升做项目及解决问题的能力
  • 对算法题无从下手,缺乏解题思路和常见解题模板。
  • 自控力不足,难以专注于系统复习。
  • 希望获得大厂的内推机会。
  • 独自备战校招社招感到孤单,想要找到学习伙伴。

不适合人群:

  • 缺乏耐心和毅力,急于求成的人
  • 对编程逻辑思维基础薄弱,且不愿努力提升的人
  • 只想快速获得成果而不注重基础学习的人
相关推荐
评论区

登录后即可参与讨论

立即登录