Diyelim ki böyle bir sınıf var (bu sadece bir örnek):
class A {
double *ptr;
public:
A() : ptr( new double[100] ) {}
A( const A &other ) {
other.ptr[7] = 15;
}
void doNotChangeMyData() const {
ptr[43] = 14;
}
void changeMyData() {
ptr[43] = 14;
}
~A() { delete[] ptr; }
};
const
Kopya kurucu ve hem de doNotChangeMyData
böylece fonksiyonu yapmak ptr
değiştirilemez; ancak bu yine de işaret ettiği dizinin içeriğini değiştirmeme izin veriyor ptr
.
Dizisinin içeriğinin yalnızca örnek ptr
olarak değiştirilmesini önlemenin, const
"dikkatli olmak" (veya ham işaretçiden uzaklaşmak) dışında bir yolu var mı?
Gibi bir şey yapabileceğimi biliyorum
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Ama yapmak istemem ...
std::vector::operator[]()
değerleri değiştirebilir mi?
vector
işe yarayacaktı.
std::vector::operator[]() const
bir const
başvuru döndürür
std::vector