компилируется:STL назначение контейнера и константные указатели
int* p1;
const int* p2;
p2 = p1;
Это не:
vector<int*> v1;
vector<const int*> v2;
v2 = v1; // Error!
v2 = static_cast<vector<const int*> >(v1); // Error!
Каковы правила эквивалентности типа для вложенных константных указателей? Я думал, что обращение будет неявным. Кроме того, я бы предпочел не применять точечное назначение контейнеров STL, если только мне это не нужно.
Почему? Я бы понимал, что не решаюсь о неявно преобразовании вектора в вектор , но int * to const int *? Я думал, что в этом отношении особое внимание уделяется соседу. Любая идея, почему стандарт C++ решил против нее? –
Возможно, что-то, что связано с шаблонами, точно соответствует, а не всегда самым удобным. – user7116
Я видел этот пример где-то: яблоко - это плод, но сумка из яблок - это не мешочек с фруктами. Это нарушило бы принцип ответственности Лискова: вы можете поместить Оранжевый в Сумку с фруктами, но вы не можете поместить Оранжевый в ящик яблок. Если Bag (или, в вашем случае, вектор) были неизменными, у вас не было бы этой проблемы. –