const vector<int *>
'un gerçek anlamından emin değilim, bu yüzden bir fikir edinmek için aşağıdaki kodu derledim ama şimdi daha kafam karıştı. Burada durmuş olsaydıNeden int göstergelerinin const vektöründe dengesiz öğe ötelenebilir?
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?
, ben const vector<int *>
const int * const
bir vektör olduğu varsayılmıştır olurdu, ama o zaman açıkça bu varsayımı çelişki aşağıdaki çalıştı.
*(w[0]) += 3; //passed. Value not constant?
*(w[0]) = 20; //passed. Why...
Şimdi *(w[0])
bana bilinmeyen bir nedenle belli ki farklı ++
ve +=
ve atama davranır. Kendimi const vector
'un vector
sınıfının sabit bir nesnesini ilan ettiğine ve yukarıdaki sonuçların vector
sınıfının aşırı yüklenmesinin gerçek uygulamasına bağlı olabileceğine inandım. Ama kafamı bunun etrafına saramam. Birisi açıklayabilir mi lütfen?
İlgili ise, Mac'te g ++ 4.2 kullandım.
Bunu ilginç bulabilirsiniz: Önceden arttırma yapmak için gönderiyi değiştirin ve ikinci hata örneğinde ne olduğunu görün. '++ * (a [0]); '. – WhozCraig
Sanırım büyük bir karışıklık kaynağı yazıyor '* (w [0]) ++;' yerine (* w [0]) ++; '(ki bunun muhtemelen beklenen sonuç olduğunu düşünüyorum). Operatör önceliği bazen biraz zor olabilir. – Kat