zoukankan      html  css  js  c++  java
  • 每日一问4: ++i和i++的区别

      i++和++i很明显的区别就是:++i是先对i进行加一操作然后再返回i的值,而i++是先返回i的值再对i进行加一操作。

    int main()
    {
        int i = 1, j = 1;
        cout << "i++:" << i++ << endl;
        cout << "++j:" << ++j << endl;
        return 0;
    }

      执行结果如下:

      然后我再从C++的角度将一下这两者的区别,首先我们来看看这两者的底层实现:

    //++i
    Typename operator ++()
    {
        (*this) = (*this) + 1;
        return *this;
    }
    //i++
    Typename operator ++(int)
    {
        A t = *this;
        ++(*this);
        return t;
    }

      这里需要注意的是,int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。此外我们也可以看到,i++返回的是一个临时变量,即右值(左右值的概念可以看这里)C++中的左值,右值,左值引用,右值引用。所以不能对其进行普通引用,示例代码如下:

    int fun(int& i)
    {
        cout << i << endl;
    }
    
    int main()
    {
        int i = 1, j = 1;
        fun(i++);    //正确
        fun(++i);     //错误,非常量引用的初始值必须为左值
        return 0;
    }

      此外,在for循环中,使用i++和++i虽然效果是一样的,但是两者的效率是有区别的。从前面的底层实现我们可以看到,i++需要生成一个临时变量,而++i不需要,所以在大多数情况下,for循环中推荐使用++i。

      i--和--i可以类比i++和++i来学习,这两者没有什么区别。

  • 相关阅读:
    滑动窗口法学习
    209. Minimum Size Subarray Sum
    485. Max Consecutive Ones
    27. Remove Element
    167. Two Sum II
    561. Array Partition I
    344. Reverse String
    14. 最长公共前缀
    layui上传文件时出现 请求上传接口出错
    Linux-5.13将初步支持苹果M1 Soc
  • 原文地址:https://www.cnblogs.com/honernan/p/13804017.html
Copyright © 2011-2022 走看看