current position:Home>40 - Pre- and post-operators

40 - Pre- and post-operators

2022-11-24 22:40:08uwu16

---- 整理自狄泰软件唐佐林老师课程

问题
下面代码的区别?why?
在这里插入图片描述

1.1 编程实验

在这里插入图片描述

  • The processing in assembly is the same,So it is impossible to restore from compiled binary program ++i 还是 i++

1.2 事实

  • 现代编译器产品会对代码进行优化
  • 优化使得最终的二进制程序更加高效
  • 优化后的二进制程序丢失了C/C++的原生语义
  • 不可能从编译后的二进制程序还原C/C++程序
  • C/C++Developed software cannot be fully decompiled

1.3 思考

++操作符可以重载吗?如何区分前置++和后置++?

2. ++操作符可以被重载

  • Both global functions and member functions can be overloaded
  • 重载 前置++操作符 不需要额外的参数
  • 重载 后置++操作符 需要一个int类型的占位参数

2.1 编程实验:++操作符的重载

#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;
}

在这里插入图片描述

2.2 真正的区别

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

3. 小结

  • 编译优化使得最终的可执行程序更加高效
  • 前置++操作符和后置++Operators can be overloaded
  • ++操作符的重载必须符合其原生语义
  • 对于基础类型,前置++和后置++的效率几乎相同
  • 对于类类型,前置++的效率高于后置++

copyright notice
author[uwu16],Please bring the original link to reprint, thank you.
https://en.chowdera.com/2022/328/202211242224142651.html

Random recommended