Esto compila:STL asignación de contenedores y punteros const
int* p1;
const int* p2;
p2 = p1;
Esto no es así:
vector<int*> v1;
vector<const int*> v2;
v2 = v1; // Error!
v2 = static_cast<vector<const int*> >(v1); // Error!
¿Cuáles son las reglas de equivalencia de tipo de punteros const anidados? Pensé que la conversión sería implícita. Además, preferiría no implementar la asignación por puntos de los contenedores STL, a menos que realmente tenga que hacerlo.
¿Por qué? Yo entendería dudar sobre la conversión implícita del vector al vector , pero int * to const int *? Pensé que const recibe un trato especial en este sentido. ¿Alguna idea de por qué el estándar C++ decidió no hacerlo? –
Quizás algo relacionado con las plantillas coincida exactamente, no siempre es el más conveniente. – user7116
Vi este ejemplo en alguna parte: una manzana es una fruta, pero una bolsa de manzanas no es una bolsa de fruta. Violaría el Principio de Sustituibilidad de Liskov: puedes poner una naranja en una bolsa de fruta, pero no puedes poner una naranja en una bolsa de manzanas. Si Bag (o, en su caso, vector) fuera inmutable, no tendría este problema. –