C++ 操作符

來源:互聯網
上載者:User

標籤:target   except   ret   對象   double   關於   基本   複數   while   

先給出一片部落格。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)

 

C++ 操作符

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.