zoukankan      html  css  js  c++  java
  • ++操作符重载代码分析

    之前在你必须知道的495个C语言问题,学习体会三中提到了C++的自加++重载,以此说明前置++ 和后置++的效率问题,现在这这篇文中给出 代码来分析下:

    #include <iostream>
    using namespace std;
    
    class Integer
    {
    public:
    	Integer(long x):m_data(x){};
    	Integer(){};
    	~Integer(){};
    	Integer& operator++();
    	Integer operator++(int);
    	void printIn();
    private:
    	long m_data;
    	
    };
    //前置++
    Integer& Integer::operator++()
    {
    	cout << "prefix ++ opreator called"<<endl;
    	m_data += 1;
    	return *this;
    }
    
    //后置++,重载的区别在于其参数增加一个int类型的哑元,这是C++规定的,我就照做了
    Integer Integer::operator++(int)
    {
    	cout << "suffix ++ operator called"<< endl;
    	Integer temp = *this;
    	m_data ++;
    	return temp;
    }
    
    void Integer::printIn()
    {
    	cout << "integer is "<< this->m_data << endl;
    }
    int main(int argc,char *argv[])
    {
    	Integer a = 90;
    	Integer b;
    	Integer c;
    	
    	c = ++a;
    	c.printIn();
    	
    	b = a++;
    	b.printIn();
    	return 0;
    }
    

    输出如下:

    g++ plusop.cpp  && ./a.out
    
    prefix ++ opreator called
    integer is 91
    suffix ++ operator called
    integer is 91
    

    总结下:通过以上++的重载可以看到,前置++的重载 是直接返回的*this引用,而后置++的重载 需要一个类的临时变量,这涉及到类的构造与析构,消耗了更过的资源和时间。

    因此,在大型代码中,建议使用前置++来自增一个类或者变量是 最佳的选择。

  • 相关阅读:
    第九章 读书笔记
    第八章 读书笔记
    第七章 读书笔记
    第六章 读书笔记
    第五章 读书笔记
    第四章读书笔记
    第三章读书笔记
    第九章 硬件抽象层:HAL
    第10章 嵌入式linux的调试技术
    第八章 蜂鸣器驱动
  • 原文地址:https://www.cnblogs.com/Stultz-Lee/p/6774990.html
Copyright © 2011-2022 走看看