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

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++深度解析教程
发布了271 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/SlowIsFastLemon/article/details/104247299