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 const
cả hàm tạo sao chép và doNotChangeMyData
hàm làm cho nó ptr
khô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 ptr
mảng chỉ bị thay đổi trong các const
trườ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?
vector
sẽ hoạt động.
std::vector::operator[]() const
trả về một const
tham chiếu
std::vector