——不注意時,重載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的用法將被報錯