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; }
};
constKopya kurucu ve hem de doNotChangeMyDataböylece fonksiyonu yapmak ptrdeğ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 ptrolarak 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?
vectorişe yarayacaktı.
std::vector::operator[]() constbir constbaşvuru döndürür
std::vector