ว่าฉันมีชั้นเรียนที่มีลักษณะเช่นนี้ (นี่เป็นเพียงตัวอย่าง):
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[]()
สามารถแก้ไขค่าได้ใช่ไหม
vector
จะทำงาน
std::vector::operator[]() const
ส่งคืนconst
ข้อมูลอ้างอิง
std::vector