可能重复:
Why does stack<const string> not compile in g++?矢量<const int>是不允许的。那么map <const int,int>等等呢?
我们知道,vector<const int>
是不允许的。
但是是否允许map<const int, int>
,map<int, const int>
或map<const int, const int>
?
为什么(不)?
可能重复:
Why does stack<const string> not compile in g++?矢量<const int>是不允许的。那么map <const int,int>等等呢?
我们知道,vector<const int>
是不允许的。
但是是否允许map<const int, int>
,map<int, const int>
或map<const int, const int>
?
为什么(不)?
向量中的项必须是可复制构造的或(如C++ 11)move-constructible。
地图中的关键只需要破坏,而不是复制/移动可构造,所以在这方面的要求比较松散。
至于为什么这是非常简单的:当/如果一个向量被调整大小,现有缓冲区中的数据必须被复制或移动到新的缓冲区中。相比之下,地图通常将其内容作为节点存储在树中。一旦创建了一个节点,它就会一直存在直到它被销毁。虽然树有时需要平衡,但只需要操作节点之间的指针 - 在创建节点之后,节点中的密钥永远不会被修改。
您需要能够为存储在STL容器中的项目插入副本,这就是为什么它不被允许。
您仍然可以使用const引用来通过类方法(getter)通过const_iterator
将容器导出为只读访问。
游戏SO很有趣,不是吗? –
'丹尼斯里奇'是一个大胆的昵称;)... –
你想要做什么,你需要这些东西? –