này biên dịch:STL và con trỏ const
int* p1;
const int* p2;
p2 = p1;
này không:
vector<int*> v1;
vector<const int*> v2;
v2 = v1; // Error!
v2 = static_cast<vector<const int*> >(v1); // Error!
gì là các quy tắc tương đương kiểu cho con trỏ const lồng nhau? Tôi nghĩ rằng chuyển đổi sẽ được ngầm định. Bên cạnh đó, tôi không muốn thực hiện phân bổ điểm khôn ngoan của container STL, trừ khi tôi thực sự phải.
Tại sao? Tôi sẽ hiểu được do dự về ngầm chuyển đổi vector để vector , nhưng int * để const int *? Tôi nghĩ const sẽ nhận được sự đối xử đặc biệt trong lĩnh vực này. Bất kỳ ý tưởng tại sao tiêu chuẩn C++ quyết định chống lại nó? –
Có lẽ một cái gì đó để làm với các mẫu được kết hợp chính xác, không phải lúc nào cũng thuận tiện nhất. – user7116
Tôi thấy ví dụ này ở đâu đó: Apple là trái cây, nhưng một túi táo không phải là một túi trái cây. Nó sẽ vi phạm Nguyên tắc thay thế Liskov: bạn có thể đặt một quả cam vào một túi trái cây, nhưng bạn không thể bỏ một quả cam vào một túi táo. Nếu Bag (hoặc, trong trường hợp của bạn, vector) là bất biến, bạn sẽ không có vấn đề này. –