我有一個類,它本質上是一個帶有標籤內容的數組,我想爲它定義一些運算符。我希望這樣做,以便更改類中元素的數量非常簡單,因爲我期望未來的用戶可以更改跟蹤的變量,但我也希望確保該類的基本算術運算是儘可能高效。構造運算符的結果與對默認構造對象的運算
我可以看到實施運營商的兩種方式。以某Vector2D
類的例子:
struct Vector2D {
//members
const static int nElem = 2;
double x;
double y;
//Constructors
Vector2D() {}
Vector2D(double X, double Y) : x(X), y(Y) {}
//Operators
double& operator[] (int index) {
switch(index) {
case 0:
return x;
case 1:
return y;
default:
return std::out_of_range ("Oops");
}
}
// Option 1: operator+ by constructing result
Vector2D operator+ (const Vector2D & rhs) const {
return Vector2D(x + rhs.x, y+rhs.y);
}
// Option 2: operator+ using loop and [] operator
Vector2D operator+ (const Vector2D & rhs) const {
Vector2D result;
for(int i = 0; i < nElem; i++)
result[i] = (*this)[i] + rhs[i];
return result;
}
};
假設我使用-03優化,會不會有中operator+
兩種實現之間有什麼區別?我的理解是,因爲構造函數的默認構造函數沒有代碼體,並且類內容是默認數據類型,所以在設置其成員之前,在選項2中沒有額外的開銷來調用result
上的默認構造函數。我期望這兩者是相同的,但我的知識還不夠確定。
你的兩個實現不這樣做同樣的事情...第二個只是增加了'X '兩次,呃,我不確定你想怎麼做 – rabensky
我的錯誤。修正了選項2. – user1476176