Скажіть, у мене клас, який виглядає приблизно так (це лише приклад):
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
у конструкторі копіювання, так і в doNotChangeMyData
функції роблять це таким, що ptr
його неможливо змінити; однак це все ще дозволяє мені змінювати вміст масиву, на який вказує ptr
.
Чи існує спосіб запобігти ptr
зміні вмісту масиву 's const
лише в екземплярах, окрім «обережності» (або відмови від вихідного покажчика)?
Я знаю, що міг би зробити щось подібне
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Але я краще не повинен ...
std::vector::operator[]()
Ви можете змінити значення, правильно?
vector
спрацювало б.
std::vector::operator[]() const
повертає const
посилання
std::vector