2015-06-10 147 views
3

我有這個特殊的代碼示例:爲什麼調用這個方法而不是另一個?

struct ComplexNumber { 
     float _Re, _Im; 
    public: 
     float Re() const { return _Re; } 
     float& Re()  { return _Re; } 

     float Im() const { return _Im; } 
     float& Im()  { return _Im; } 
    }; 

,我想知道爲什麼,當我執行

ComplexNumber Num1; 
cout << Num1.Re() << endl; 

方法float& Re() { return _Re; }被調用,而不是

float Re() const { return _Re; }這似乎做好充分準備,通過使用const保護數據來執行cout。

+0

對,謝謝 – threaz

+4

我幾乎肯定[這個問題](https://stackoverflow.com/questions/21469135/overload-resolution-c-for-const-member-functions)及其[選定的答案] (http://stackoverflow.com/a/21469596/1322972)描述你所看到的。 – WhozCraig

回答

3

最佳匹配函數被調用,所以如果你有const和non const版本,非const版本將在非const對象上調用。

如果你有一個const對象(或指針或引用)

const ComplexNumber Num1; 
cout << Num1.Re() << endl; 

然後float Re() const { return _Re; }將被調用。

+0

我可以刪除'float&Re(){return _Re; }'並再次執行此操作 - const方法將被稱爲 – threaz

+0

@threaz:因爲它是唯一可以調用的函數。不是嗎? – deepmax

+0

@threaz你是對的,我不知道。猜猜最佳匹配函數正在被調用。實際上,我想到了,我知道它,因爲我使用它們:)我知道,如果你有兩個const版本只會被const對象(或指針或引用)調用。 – rozina

相關問題