首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向向量?

指向向量?
EN

Stack Overflow用户
提问于 2015-03-31 21:03:40
回答 4查看 15.2K关注 0票数 9

以下内容没有编译(非常冗长的错误,但基本上“无法重载”和“从'const void*‘到’void*‘”的无效转换)。我可以理解为什么push_back()不能编译,因为您不能复制/迁移到Foo* const中,但是为什么不能编译:

代码语言:javascript
复制
#include <vector>
using namespace std;

class Foo;

int main()
{
  vector<Foo* const> vec;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-31 21:08:01

向量可能是唯一需要元素为copy assignable的容器。这是因为元素保证连续地存储在内存中。因此,如果超出了容量,就必须分配一个新的块,并重新分配元素。您不能用const元素来完成这个任务。

如果您尝试std::vector<const int>,或者实际上任何const类型,都会出现相同的错误。

票数 14
EN

Stack Overflow用户

发布于 2015-03-31 21:08:47

您正在声明一个包含Foo的const指针的向量,这意味着指针不能被修改。当您在向量中插入元素时,需要向const pointer写入元素(无效)。

您肯定它不是:std::vector<Foo const *> vec;,其中Foo没有被指针修改。

票数 4
EN

Stack Overflow用户

发布于 2015-03-31 21:09:41

向量元素需要为许多操作指定:如果在向量中间插入一个元素,则必须重新分配后面的所有元素。限定类型通常是不可分配的.

但是,如果不执行需要赋值的操作,仍然可以使用不可分配类型的向量。

但是,只有当std::allocator<T>是非const对象类型时才可以使用T,因此std::vector<const int>格式不正确。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29378533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档