Nói rằng tôi có một lớp trông như thế này (đây chỉ là một ví dụ):
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; }
};
Trong constcả hàm tạo sao chép và doNotChangeMyDatahàm làm cho nó ptrkhông thể thay đổi; tuy nhiên, điều này vẫn cho phép tôi sửa đổi nội dung của mảng được chỉ bởi ptr.
Có cách nào để ngăn nội dung của ptrmảng chỉ bị thay đổi trong các consttrường hợp, không phải là "cẩn thận" (hoặc thay đổi khỏi con trỏ thô) không?
Tôi biết tôi có thể làm một cái gì đó như
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Nhưng tôi không muốn phải ...
std::vector::operator[]()Có thể sửa đổi giá trị phải không?
vectorsẽ hoạt động.
std::vector::operator[]() consttrả về một consttham chiếu
std::vector