不允许使用vector <const int =“”>。为什么pair <const int,=“”int =“”>允许?</const> </const>

时间:2012-12-07 17:30:41

标签: c++

  

可能重复:
  Why does stack<const string> not compile in g++?

An answer to another question 解释了为什么我们(据说)不能拥有const个对象的容器。例如,这是不允许的:

vector<const int> v; //not allowed

但为什么pair允许第一个对象为const?实际上,这是pair对象中map s所发生的情况。我错过了什么吗?

非常感谢对此现象的详细而直观的解释。

2 个答案:

答案 0 :(得分:15)

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

<强>更新

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

答案 1 :(得分:6)

std::pair只有在您尝试分配内容时才需要分配内容。但是,std::vector始终需要分配以进行重新分配。