——不注意時,多載operator+()會造成一個奇異的屬性:
net = force1 + force2; // 1: three Vector objects
然而,還可以這樣用:
force1 + force2 = net; // 2: dyslectic programming
cout<<(force1 + force2 = net).magval()<<endl; // 3: demented programming
這是不合理的(覆寫了創建好的臨時物件)但可行的:
- (2)創建了一個物件和的臨時物件,再用net覆寫,之后將其丟棄;
- (3)在(2)的基礎上呼叫了臨時物件的magval()方法,之后才丟棄臨時物件
并且可能發生如下錯誤:
將 if (force1 + force2 == net) 誤用為 if (force1 + force2 = net)
這同樣可能通過編譯
解決由此引發的誤用和濫用的辦法:
將回傳型別宣告為const,這樣便不能對臨時物件進行修改,因此force1 + force2 = net的用法將被報錯
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9924.html
標籤:C++
上一篇:CPU性能分析工具原理
下一篇:突破C++瓶頸,在此一舉!
