2015-10-25 43 views
0

我有一個函數可以處理自定義類型(類)的對象。 爲了避免複製該對象,我想讓我的函數通過引用來使用它。將返回值傳遞給由參考調用的函數

這適用於由代碼創建的對象,但是對於由方法返回的同一類型的對象而言,這不起作用。

下面是一個簡單的例子與整數,其中areEqual是函數:

#include <iostream> 
using namespace std; 

class part 
{ 
    int i_Nbr; 
    public: 
    part(int n){ 
     i_Nbr = n; 
    } 
    int getNbr(){ 
     return i_Nbr; 
    } 
}; 

bool areEqual(int& q1, int& q2){ 
    return q1==q2; 
} 

int main(){ 
    int i1 = 50; 
    int i2 = 60; 
    part a(240); 
    part b(220); 
    bool eq; 

    // this works 
    eq = areEqual(i1, i2); 
    cout << eq << endl; 

    // but this doesn't 
    eq = areEqual(a.getNbr(), b.getNbr()); 
    cout << eq << endl; 

    return 0; 
} 

在我來說,對象不是整數,但與許多內部變量和許多方法的類的實例。 有沒有辦法正確地做到這一點?

UPDATE: 由不工作我的意思是我得到了一個編譯錯誤:

file.cpp:32:28: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’ 
+3

我缺少的東西或者是兩行相同呢?你是否複製粘貼並忘記更改第二行?另外,你能否詳細說明「不起作用」? – Derek

+0

@Derek:是的,你是對的。抱歉。 – amineDZ

+1

您想爲'areEqual'使用'const int&'參數。換句話說,'bool areEqual(const int&q1,const int&q2)'。 – crayzeewulf

回答

2
bool eq = areEqual(a.getNbr(), b.getNbr()); 

不起作用,因爲該函數返回int,這是一個臨時的對象在致電areEqual。當參數類型爲int&時,不能使用臨時對象。使用int const&作爲參數類型areEqual或簡單地int

bool areEqual(int const& q1, int const& q2){ ... } 

bool areEqual(int q1, int q2){ ... } 
+0

使參考'const'延長臨時對象的生命週期:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – Derek

+0

@Derek :感謝您的鏈接。 – amineDZ