Questo compila:STL assegnazione contenitore e puntatori const
int* p1;
const int* p2;
p2 = p1;
Questo non lo fa:
vector<int*> v1;
vector<const int*> v2;
v2 = v1; // Error!
v2 = static_cast<vector<const int*> >(v1); // Error!
Quali sono le regole di equivalenza di tipo per i puntatori const annidati? Pensavo che la conversione sarebbe stata implicita. Inoltre, preferirei non implementare l'assegnazione point-wise dei container STL, a meno che non sia necessario.
Perché? Comprenderei essere titubante riguardo alla conversione implicita del vettore nel vettore , ma int * in const int *? Pensavo che const ricevesse un trattamento speciale a questo riguardo. Qualche idea sul perché lo standard C++ abbia deciso contro di esso? –
Forse qualcosa a che fare con i modelli sono esattamente uguali, non sempre il più conveniente. – user7116
Ho visto questo esempio da qualche parte: una mela è un frutto, ma un sacchetto di mele non è un sacchetto di frutta. Violarebbe il Principio di sostituibilità di Liskov: puoi mettere un'arancia in un sacchetto di frutta, ma non puoi mettere un'arancia in un sacchetto di mele. Se Bag (o, nel tuo caso, vector) fosse immutabile, non avresti questo problema. –