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来学习,这两者没有什么区别。

  • 相关阅读:
    初识 Image,region,xld(1)
    Opencv 滤波<11>
    Opencv 掩模<10>
    事件
    Ubuntu16 安装Anaconda3+tensorflow cpu版
    Windows10:Opencv4.0+Opencv4.0.1_contrib编译
    Qt5连接Mysql环境配置
    Qt5显示中文字符
    如何为多个VLAN配置DHCP?
    二层网络架构,接入交换机和核心交换机
  • 原文地址:https://www.cnblogs.com/honernan/p/13804017.html
Copyright © 2011-2022 走看看