我試圖模擬緩存。給定數組時,我必須確定operator[](size_t i)
是用於獲取數據還是設置它。我在它的簽名中爲const
超載了它,並且沒有它的設置部分。強制編譯器選擇const運算符過載
我的問題是,因爲數組是動態分配的,所以只有非const operator[]
被調用。例如:
class A {
int n;
double *v;
public:
A(int i) : n(i),v(new double[i]) {}
const double & operator[](int i) const {
cout<<"get"<<endl ;
return v[i];
}
double& operator[](int i) {
cout<<"set"<<endl;
return v[i];
}
};
int main(){
double pi = 3.14;
A a(10);
a[2] = pi;
pi = a[3];
}
結果是
set
set
但我希望打印
set
get
然後,您將需要單獨的函數,因爲'const'或non-'const'函數的選擇並不關心您將如何處理它。如果你在非'const'對象上調用它,你會得到非''const'版本,對於'const'對象,你會得到'const'版本。當你做'a [3]'時,它不知道你不會分配它。它只是調用非''constst'函數,因爲'a'不是'const'。 –