2012-01-26 36 views

回答

3

相反,其他的答案,這是必要el到返回一個參考,考慮這個例子:

#include <iostream> 

struct A { 
    A& operator=(float f) { 
    std::cout << "hey: " << f << std::endl; 
    } 
}; 

struct BR { 
    A el(int j, int k) { 
    return A(); 
    } 
    float el(int i, int j, int k) { 
    return 4.2; 
    } 
}; 

int main() { 
    BR buf_right, block; 
    int i = 0, j = 0, k = 0; 
    buf_right.el(j, k) = block.el(i, j, k); 
    return 0; 
} 

運行此打印以下到stdout:

哎:4.2

+0

如果這些值是普通類型,例如'int',該怎麼辦?想知道是否仍然可以重載'='來實現這個目標? – Hossein

+0

@Hossein:據我所知,不可能實現例如'int&int :: operator =(...)'。所以在*那個案例中你確實需要一個(可變的)引用。 – bitmask

6

如果el方法通過引用返回,這是有效的。見https://isocpp.org/wiki/faq/references#returning-refs

+0

更確切地說,如果它返回*非const *引用。 – Nawaz

+0

@Nawaz:假設'operator ='不是一個const成員函數(這會非常奇怪,但我認爲是合法的)。 –

+0

@Nawaz:是的。實際上有很多方法可能無效 - 我的意思是,這個問題甚至沒有任何東西可以說明block'el(i,j,k)有一個可以隱式轉換的返回類型到'buf_right.el(j,k)'的返回類型有一個可訪問的賦值操作符的類型。也許我應該寫下「如果...可以是有效的」而不是「如果......這是有效的」? – ruakh

6

如果buf_right.el(j, k)返回的參考....

同樣如何[]運算符的作品, a[2] =3相當於a.operator[](2) = 3

相關問題