大数跨境
0
0

面试官:++i和i++功能差不多,那么你会优先考虑用哪个?

面试官:++i和i++功能差不多,那么你会优先考虑用哪个? 拓跋阿秀
2025-12-09
0
  
   
八股文学习网站:https://interviewguide.cn

在大多数编程语言中都有++ii++,后续代码拿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 = {12345};

    // 推荐:使用前缀递增
    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

好文推荐

C++ 训练营,来了!

Java/Golang后端训练营,主打一个突击!

阿秀去面腾讯了(社招两年面试经验)

没想到,百度的市值已经连腾讯音乐都不如了。。。

你好,我是阿秀,普通学校毕业,校招时拿到字节跳动SP、百度、华为、农业银行等6个互联网中大厂offer,这是我在校期间的编程学习之路,点击蓝字即可查看我是如何自学技术以应对第二年的校招的全过程。

毕业后我先于抖音部门担任全栈开发工程师,目前在上海某外企带领团队继续从事全栈开发,负责的项目已经顺利盈利300w+。在研三那年就组建了一个阿秀的学习圈,持续分享校招/社招跳槽找工作的经验,目前已经累计服务22、23、24、25、26届同学,共计超过 4400 +人,欢迎点此🔗加入我们,一群人才能走的更远、更稳、更顺。

【声明】内容源于网络
0
0
拓跋阿秀
前字节跳动抖音全栈开发,现某外企项目负责人,分享求职、校招、职场等内容,我的学习笔记网站:interviewguide.cn
内容 974
粉丝 0
拓跋阿秀 前字节跳动抖音全栈开发,现某外企项目负责人,分享求职、校招、职场等内容,我的学习笔记网站:interviewguide.cn
总阅读20
粉丝0
内容974