我正在經由高斯消去解決方程以矩陣形式的系統的程序。然而,我遇到了一個有趣的問題:如果我的算術運算符通過引用傳遞,行的規範化會產生不正確的結果。通行證通過引用,源被修改運行中示
我在執行中,矩陣是由多種載體的,所以行操作只是矢量運算。以下是相關的功能:
載體:
T& operator[] (const int i);
const T& operator[] (const int i) const;
Vector<T>& operator/=(const T& rhs);
template<class T>
Vector<T>& Vector<T>::operator/=(const T& rhs)
{
if (rhs == 0)
{
throw DivideByZeroException();
}
for (int i = 0; i < _size; ++i)
{
_data[i] /= rhs;
}
return *this;
}
矩陣:
Vector<T>& operator[] (const int i);
const Vector<T>& operator[] (const int i) const;
(以這種方式,單個[]用於訪問一排,和雙[ ] []是用於訪問的元素)
現在這裏是引起該問題的行:
mat[i] /= mat[i][i];
的這裏的問題是,這種操作在某些時候修改mat[i][i]
,然後使用修改的值,因爲operator/=
通過參考使用通行證。
問題:它會更好改變經營者(以及所有類似的運營商),按值傳遞,或者只是改變所引起的問題行了?是否假定所有的操作員都會被引用,從而形成類似上面那樣的錯誤的行?
我覺得你行'墊[I]/=墊[我] [我]'突破2序列points__之間的基本語言規則__no多種分配。那麼它不是一個規則,只是一個未定義的行爲。 –