为什么vector <int * =“”const =“”>非法/不合逻辑?</int>

时间:2013-12-26 20:43:50

标签: c++ pointers vector const std

我是C ++的新手:) 我只想创建一个常量指向非常量int的向量。因此,我想,我将有一个指针向量,其地址我可能不会改变。

我写道:

std::vector<int * const> pointers;

但无法编译(使用GCC)。

我得到5个错误,从以下开始: “初始化'void operator delete(void *)''的参数1” 和 “从'const void *'无效转换为'void *'”

为什么这是非法的(或不合逻辑的)以及它与void指针有什么关系?

2 个答案:

答案 0 :(得分:2)

简而言之,vector要求其模板参数支持一些基本操作,其中之一是项目分配。

vector有几项操作需要分配给它的项目。例如,每当vector用完空间并需要重新调整大小时,它就会分配一个新的内存块,然后将其信息复制到新块。如果项类型为const,则无法分配给新的内存块。

无论如何,将参数声明为const并不是很重要。你试图得到什么行为?

答案 1 :(得分:1)

我认为错误的简洁理由如下:向量是一个可变数据结构,因此您可以更改向量的内容(例如,使用push_backerase)。当您实例化矢量模板时,您实例化将尝试覆盖矢量内容的代码,这是您声明int *const所禁止的。

如果你想要一个无法变异的向量,那么你可以使用对向量的常量引用,或者创建一个const向量并按值传递它。