const vector<int *>
の真の意味が分からないので、以下のコードをコンパイルしてアイデアを得ましたが、今はもっと混乱しています。intポインタのconstベクトルの逆参照される要素が変更可能なのはなぜですか?
vector<int *> v;
int x = 1, y = 2;
v.push_back(&x);
v.push_back(&y);
const vector<int *> w = v;
w[0] = &y; //failed. Element is a constant pointer?
*(w[0]) ++; //failed. Element pointer references to constant value?
私はここに停止していた場合、私はconst vector<int *>
がconst int * const
のベクトルであると仮定しているだろうが、その後、私ははっきりとその仮定を否定し、次を試してみました。私には未知の理由のために今
*(w[0]) += 3; //passed. Value not constant?
*(w[0]) = 20; //passed. Why...
*(w[0])
明らかに異なっ++
と+=
と割り当てを扱います。 const vector
はvector
クラスの定数オブジェクトのみを宣言し、上記の結果はvector
クラスの演算子オーバーロードの実際の実装に依存する可能性があると私は確信しました。しかし、私はこれの周りに私の頭を包むことはできません。誰でも説明を助けることができますか?
関連性がある場合は、Macでg ++ 4.2を使用しました。
これは興味深いかもしれません。ポストをプリインクリメントに変更して、2番目の障害の例で何が起こるかを見てください。 '++ *(w [0]);'。 – WhozCraig
私は混乱の大きな原因は、 '(* w [0])++;'の代わりに '*(w [0])++;'を書いていると思います。オペレータの優先順位は、時にはややこしいことがあります。 – Kat