文章目录

  • 1 C++中前置操作符和后置操作符的重载
    • 1.1 前置操作符和后置操作符的原生语义
    • 1.2 ++操作符的重载
    • 1.3 前置++和后置++的真正区别

1 C++中前置操作符和后置操作符的重载

1.1 前置操作符和后置操作符的原生语义

下面的代码有区别吗?为什么?

在实际测试中发现,如上两行代码对应的汇编语句一摸一样。

我们需要知道如下事实:

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

1.2 ++操作符的重载

++操作符可以被重载:

  • 全局函数和成员函数均可进行重载,推荐使用成员函数。
  • 重载前置++操作符不需要额外的参数。
  • 重载后置++操作符需要一个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 t(0);t++;++t;return 0;
}

1.3 前置++和后置++的真正区别

对于基础类型的变量:

  • 前置++的效率与后置++的效率基本相同。
  • 根据项目组编码规范进行选择。

对于类类型的对象:

  • 前置++的效率高于后置++。
  • 尽量使用前置++操作符提高程序效率。

参考资料:

  1. C++深度解析教程

C++中前置操作符和后置操作符的重载相关推荐

  1. 【C++深度剖析教程19】前置操作符与后置操作符

    今天来学习C++中的前置操作符(++i)与后置操作符(i++). 一回顾 以前在C语言的理论课程中,我们就学过,前置和后置操作符,有一定的区别: 但是我们可以看到下图,发现前置和后置++的操作符所对应 ...

  2. 40 - 前置操作符和后置操作符

    ---- 整理自狄泰软件唐佐林老师课程 1. 问题 下面代码的区别?why? 1.1 编程实验 汇编中的处理是一样的,所以不可能从编译后的二进制程序还原 ++i 还是 i++ 1.2 事实 现代编译器 ...

  3. pytest中前置setup和后置teardown的使用方法

    前言 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更高级一点的setupClass和teardownClass,需 ...

  4. Dart 后置操作符! flutter 问号符号

    由于空 - null 的影响, 就有了 后置操作符 - ! 的出现 作后缀的! 会让左侧的表达式转成对应的非空类型 与其他所有转换一样,使用 ! 会失去部分静态的安全性.这些转换必须在运行时进行 像 ...

  5. Spring AOP中的前置通知和后置通知详解

    不同版本的spring对AOP的支持有所不同,spring2.0之前,它主要针对不同类型的拦截器使用XML配置文件通过代理来实现.而spring2.0之后,它可以使用JDK5的注解来完成AOP的实现, ...

  6. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试

    为什么80%的码农都做不了架构师?>>>    但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的A ...

  7. Python Pytest前置setup和后置teardown详解

    pytest用例运行级别: ●模块级(setup_module/teardown_module)开始于模块始末,全局的 ●函数级(setup_function/teardown_function)只对 ...

  8. html5 android6.0摄像头,HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试...

    但是navigator.getUserMediau已经从 Web 标准中删除,虽然部分浏览器可以使用,生产环境中还是要做好兼容.新的API更替为MediaDevices.getUserMedia.Me ...

  9. 【 Apifox】Apifox的前置操作与后置操作

    Apifox官网地址:http://apifox.cn/a103abcc 文章目录 一.断言 二.提取变量 三.数据库操作 结语 一.断言 后置操作支持添加断言,可对接口返回的数据(或响应时间)设置断 ...

最新文章

  1. C#WinForm制作异形窗体/控件
  2. Javascript prototype理解
  3. 几个UI Prototype应用的使用感受
  4. 剖析Elasticsearch集群系列第三篇 近实时搜索、深层分页问题和搜索相关性权衡之道...
  5. ThinkPHP中的快捷函数小结
  6. linux mk创建文件,Linux运维知识之Linux mkkickstart建立安装的组态文件命令详解
  7. 华为系统更新后通知栏变大了_苹果发布多款系统更新,包括面向老机型推送iOS 12.5...
  8. Java笔记-RabbitMQ的消息确认机制(事务)
  9. 2018上半年广东省中小学教师资格认定流程
  10. java 如何将word 转换为ftl_3种方法轻松将PDF转换为Word文档,办公必备
  11. 吴恩达机器学习视频学习笔记(4)
  12. 改变PSD文件单一的图标,让图标变成图像缩略图
  13. 在 AWS上域名备案流程和文件
  14. ②五元物联网芯片点亮led 庆科EMW3060 , 运行alios- blink程序
  15. unity3D数据的本地存储(xml的方式)
  16. 微信小程序 09 前后端交互
  17. 飞冰 - ICE Design Pro 使用指南
  18. 使用卷积神经网络进行图片分类 2
  19. web开发前台,懒人建站资源库
  20. 基于微信的旅游小程序、景区景点购票小程序、毕业设计、开题报告、毕业论文参考(1)小程序

热门文章

  1. 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective 精炼版
  2. 在linux下安装matlab2013a的经验
  3. 被人崇拜的欧拉恒等式
  4. 硬核创客DIY遥控氦气球飞行器——会飞的鲨鱼的诞生的全过程
  5. 从零开始的AI·机器学习の基本概念
  6. mysql 面试知识点笔记(二)查询优化及索引越多越好吗?
  7. 八周二次课 rsync工具介绍,常用参数选项以及和ssh同步
  8. 通过安装scl软件集,使用高版本gcc的方法
  9. 为女儿取名“王者荣耀”可想过代价?
  10. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...