40_前置操作符和后置操作符

1. i++和++i和区别

i++; // i 的值作为返回值, i 自增 1;
++i; // i 自增1, i 的值作为返回值

  • 在工程中,独立的i++;++i;是没有区别的,因为在没有返回值的情况下,编译器会对它们做优化处理,使得这两条语句完全一样。

2. 意想不到的事实

  • 现代编译器产品会对代码进行优化
  • 优化使得最终的二进制程序更加高效*
  • 优化后的二进制程序丢失了C/C++的原生语义
  • 不可能从编译后的二进制程序还原C/C++程序——因编译器对代码进行优化后,其优化后的二进制程序丢失了C/C++的原生语义。
    C/C++开发的软件无法完全反编译!!!

3. ++操作符的重载

  • 全局函数成员函数均可进行重载
  • 重载前置++操作符不需要额外的参数
  • 重载后置++操作符需要一个int类型的占位参数

编程说明:++操作符的重载

#include <iostream>
#include <string>

using namespace std;

class Test
{
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }
    
    int value()
    {
        return mValue;
    }
    
    Test& operator ++ ()        //  前置++重载操作符
    {
        ++mValue;
        return *this;
    }
    
    Test operator ++ (int)      // 后置++重载操作符
    {
        Test ret(mValue);
    
        mValue++;
        return ret;
    }
};  

int main()
{
    Test t0(0);

    cout << "t0.value() = " << t0.value() << endl;
    
    Test t1 = ++t0;
    
    cout << "t1.value() = "<< t1.value() << endl;

    Test t2 = t0++;
    
    cout << "t2.value() = " << t2.value() << endl; 
    
    return 0;
}

输出结果

t0.value() = 0
t1.value() = 1
t2.value() = 1

4. 真正的区别—— ++i和i++的区别

  • 对于基本类型的变量:前置++的效率与后置++的效率基本相同,可以根据项目组编码规范进行选择
  • 对于类类型的对象:前置++的效率高于后置++,因此尽量使用前置++操作符提高程序效率

5. 小结

  • 编译优化使得最终的可执行程序更加高效
  • 前置++操作符和后置++操作符都可以被重载
  • ++操作符的重载必须符合其原生语义
  • 对于基础类型,前置++与后置++的效率几乎相同
  • 对于类类型,前置++的效率高于后置++
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,608评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,973评论 18 399
  • 鞋子与地板的摩擦声 点点滴滴 音乐一般在耳边想起 夜色朦胧 灯火辉煌 冬日的暖阳 噼里啪啦之间 跳跃的面孔熟悉依然...
    石川河女神阅读 1,651评论 0 0
  • 前段时间看到微信朋友圈有文言,新月许愿、满月冥想,再加上素食,能量获得很好地提升。心生向往。 昨晚正值满月,杨姐带...
    安淼儿阅读 4,831评论 0 0
  • 今天直接在昨天的文章页面修改发布,然后把昨天的文章冲掉了,再也找不回来。真是哭晕在厕所啦。 从6月2日开始为自己订...
    四十一度阅读 1,007评论 0 0