我爲我的矩陣結構寫了這段代碼。它計算了一個矩陣矩陣的值增加到e次方,但這是不相關的。我想知道最後幾行發生了什麼。改變這個指針指向的值
是否將p的值複製到指定的位置?它是淺拷貝還是深拷貝? 是這個被改變了嗎?我不這麼認爲,因爲它是常量。
如何實現該副本以使其運行速度更快?
matrix& operator ^=(int e)
{
matrix& b = *this;
matrix p = identity(order());
while (e) {
if (e & 1)
p *= b;
e >>= 1;
b *= b;
}
*this = p;
return *this;
}
不管它是深層還是淺層複製都取決於你的矩陣類是如何實現的。另外,你的方法沒有標記爲'const',因此'this'不是'const'。 – GWW 2014-10-28 23:01:23
最好使用'auto && p = identity(order());'以避免副本。而'* this = std :: move(p);'稍後。無論如何,爲什麼'* this'的別名? – Deduplicator 2014-10-28 23:03:14
我忘了'auto',但爲什麼有兩個引用? 'matrix'不是一個數組,'identity'返回一個值。別名的存在是爲了提高可讀性。 – titog 2014-10-28 23:08:35