Я не уверен в истинном значении const vector<int *>, поэтому я скомпилировал приведенный ниже код, чтобы получить представление, но теперь я больше смущен.
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. Но я не могу обмотать голову вокруг этого. Может кто-нибудь объяснить, пожалуйста?
Если это актуально, я использовал g++ 4.2 на Mac.