可能是重复问题:
为什么stack<const string>在g++中不能编译?
另一个问题的答案
解释了为什么我们(据说)不能有包含const
对象的容器。例如,下面的代码是不允许的:
vector<const int> v; //not allowed
但是为什么一个
pair
允许第一个对象是 const
?这正是 map
对象内部的 pair
所发生的。我错过了什么吗?详细和直观地解释这种现象将会非常感激。
可能是重复问题:
为什么stack<const string>在g++中不能编译?
另一个问题的答案
解释了为什么我们(据说)不能有包含const
对象的容器。例如,下面的代码是不允许的:
vector<const int> v; //not allowed
pair
允许第一个对象是 const
?这正是 map
对象内部的 pair
所发生的。我错过了什么吗?我认为其主要原因是因为std::pair
不重新分配对象,所以它们不必可分配。
更新:
实际上,只有vector容器需要可分配的对象。这是因为标准规定vector必须为其元素拥有连续的存储位置。因此,如果没有足够的空间添加更多对象,vector将不得不将其数据重新分配到另一个位置(从而使用对象的可分配属性)。
const
的痴迷是为了避免意外修改我原本不打算修改的东西。在这种情况下,我只想添加到容器中而不修改容器元素。也许我应该开始使用deque
而不是vector
?谢谢。 - Dennis Ritchieconst vector<T>
可能是你正在寻找的答案。 - prazuberconst
会阻止这一操作,是吗?我只想确保无法更改已经在容器中的元素。 - Dennis Ritchiestd::pair
只需要在尝试进行赋值时其内容可被分配。然而,std::vector
总是需要分配来重新分配空间。
std::pair
不完全是一个容器,对吧?你也可以有一个const int
。 - Bo Persson