6

可能重复:
为什么 stack<const string> 不能在 g++ 中编译?

另一个问题的答案 解释了为什么我们(据说)不能拥有const对象容器。例如,这是不允许的:

vector<const int> v; //not allowed

但是为什么 apair允许第一个对象是const?这确实是对象pair内部的 s所发生的情况。map我错过了什么吗?

对此现象的详细和直观的解释将不胜感激。

4

2 回答 2

17

我认为主要原因是因为std::pair不会重新分配对象,所以它们不必是可分配的。

更新:

实际上 vector 是唯一需要可分配对象的容器。这是因为根据标准向量,它的元素必须有一个连续的存储位置。因此,如果没有空间添加更多对象,vector 将不得不将其数据重新分配到另一个地方(因此使用对象的可分配属性)。

于 2012-12-07T17:32:01.100 回答
6

std::pair如果您尝试分配它,只需要它的内容是可分配的。但是,std::vector始终需要分配以进行重新分配。

于 2012-12-07T17:34:09.873 回答