2015-10-20 65 views
0

這可能是一個愚蠢的問題,但我無法解決這個問題。傳遞一個對象參數爲const並讀取它

我有稱爲方程的對象,其中,內部定義了一個名爲X.

在主基質,我需要調用一個稱爲f其中我需要將矩陣傳遞作爲const函數。 我需要訪問矩陣的特定位置(我不想寫,只是想讀)。

我做到以下幾點:

vec f(cx_mat const*X) 
{ 
cout << 「X[12][12] = 「 << *X(12,12) << endl; 
} 

而且這是行不通的。如果我這樣做:

vec f(cx_mat const*X) 
{ 
mat X_temp; 
X_temp = *X; 
cout << 「X[12][12] = 「 << X_temp(12,12) << endl; 

} 

我工作,我不明白爲什麼! 你能幫我嗎?

+2

這只是一個想法:它可能取決於運營商的優先順序。嘗試'cout <<「X [12] [12] =」<<(* X)(12,12)<< endl;' –

回答

2

嘗試(* X)(12,12)代替。

函數調用運算符「()」的優先級高於間接運算符「*」的優先級。

0

在你的第二個例子中,你創建了一個mat對象的副本,它不調用任何非const的X方法。這實際上是解決你的問題的方法,雖然不是很有效 - 我寧願避免不必要的副本

因此,最有可能的,mat類有operator =(const mat &)函數定義。

除的辦法,你發現還有其他的可能性:

  1. 如果你能夠改變類墊,可以使操作者()簽名常量。這將解決問題。

  2. 如果不能更改mat接口,最好將f的簽名更改爲非const參數引用,因爲如果不能更改mat接口,則不能確保operator()不會更改X的狀態。

  3. 使用const_cast。我強烈建議不要使用它。我只是爲了完整而在此提及它。

+0

非常感謝兩者。有用! – NunodeSousa

相關問題