Я не уверен в истинном значении 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.