次のようなクラスがあるとします(これは単なる例です)。
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 463035818 '10
std::vector::operator[]() const
返しますconst
@ChrisMM私が期待したのは、部屋の象に言及したかっただけです:)
—
idclev 463035818
std::vector