zoukankan      html  css  js  c++  java
  • C++ 操作符

    先给出一片博客。Link

    传递对象:

      在定义运算符的时候,向运算符函数传递参数以及返回结果时,可供选择的方式比较有限。

    关于参数的选择,主要有2种

    【1】值传递  【2】 引用传递

    对于大小在1~4个字长之间的小对象来说,采用值传递的方式通常是最好的选择,得到的性能也最好。但传递和使用参数的实际性能可能会受机器的体系结构等影响。

    对于较大的对象,一般采用引用传递的方式。例如,对于复数矩阵Matrix,因其所占空间通常不止几个字,所以我们采用引用传递的方式:

    Matrix operator+(const Matrix&, const Matrix&);//常量引用传递

    尤其是,如果传入被调函数的是内容不会被修改的较大对象,则应该采用const引用的方式。

    通常,一个运算符返回一个结果。想一个新建的对象返回指针或者引用基本上是一种比较糟糕的选择:使用指针会带来符号使用方面的困难,而引用自由存储上的对象(不管是使用指针还是引用)会导致资源管理困难。最好的方式是用传值方式返回对象。对于Matrix等较大的对象来说,我们应该定义移动操作以使得值传递的过程足够有效。

    Matrix operator+(const Matrix&, const Matrix&)  //通过传值返回
    {
      Matrix res{a};
      return res += b;  
    }

    请注意,如果运算符返回的是七参数对象的某一个,则改运算符能够并且通常通过引用的方式返回。例如,我们可以把Matrix的运算符 += 定义为如下形式:

    Matrix& Matrix::operator+=(const Matrix& a)  //通过传引用返回
    {
        if(dim[0] != a.dim[0] || dim[1] != a.dim[1])
            throw std::exception("bad Matrix += argument");
        double* p = elem;
        double* q = a.elem;
        double* end = p + dim[0]*dim[1];
        while(p != end)
            *p++ += *q++;
        return *this;
    }

    这一现象在被实现为成员函数的运算符中尤为普遍。

    如果函数只是把对象简单的传递给另一个函数,应该使用右值引用参数(Link

  • 相关阅读:
    我到 vim 配置文件---------修改从---http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html
    Bayer图像处理
    Ubuntu 12.04下安装OpenCV 2.4.2
    vim寄存器与复制粘贴的实现
    window 驱动
    js 面试题
    angular 写的一个分页功能
    angular scope 方法
    avalon 框架
    贴几个常用的基础函数
  • 原文地址:https://www.cnblogs.com/gardenofhu/p/7641414.html
Copyright © 2011-2022 走看看