2
我有一個數學庫中的結構類型4x4矩陣。他們應該保持結構(否則太多堆分配,太多垃圾)。c#乘法運算符,參考操作數
有一個乘法運算符:
public static Matrix4d operator *(Matrix4d lhs, Matrix4d rhs) {...}
而且是由參取右側矩陣的成員函數:
public Matrix4d Mult(ref Matrix4d rhs) {...}
現在,寫
Matrix4d DfromA = DfromC * CfromB * BfromA;
是多少比寫作更具可讀性
Matrix4d DfromB = DfromC.Mult(ref CfromB);
Matrix4d DfromA = DfromB.Mult(ref BfromA);
不幸的是,第二個版本是兩倍的速度。
問題:
爲什麼是編譯器不夠聰明含蓄地提及採取的參數*操作?或者當sizeof()大於特定閾值時,通常通過引用將值類型參數作爲參考對待?
有沒有什麼辦法可以得到與第一個可讀性的第二個選項的性能?