다음과 같은 클래스가 있다고 가정 해보십시오 (이것은 단지 예일뿐입니다).
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
의 배열 의 내용이 const
인스턴스에서만 변경되지 않고 "주의"가 부족하거나 원시 포인터 와 다른 것을 방지하는 방법이 있습니까?
나는 내가 할 수있는 일을 알고있다
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
그러나 나는 그럴 필요가 없습니다 ...
std::vector::operator[]()
값을 바로 수정할 수 있습니까?
@ formerlyknownas_463035818 편집 된 질문이므로 옵션이 아닙니다.) 더 이론적 인 질문이지만 그렇습니다
—
ChrisMM
vector
.
확인 @marvinIsSacul,하지만
—
idclev 463,035,818
std::vector::operator[]() const
반환 const
참조
@ChrisMM 내가 기대했던 것, 방 안에 코끼리를 언급하고 싶었다 :)
—
idclev 463035818
std::vector