我是C ++的新手:) 我只想创建一个常量指向非常量int的向量。因此,我想,我将有一个指针向量,其地址我可能不会改变。
我写道:
std::vector<int * const> pointers;
但无法编译(使用GCC)。
我得到5个错误,从以下开始: “初始化'void operator delete(void *)''的参数1” 和 “从'const void *'无效转换为'void *'”
为什么这是非法的(或不合逻辑的)以及它与void指针有什么关系?
答案 0 :(得分:2)
简而言之,vector
要求其模板参数支持一些基本操作,其中之一是项目分配。
vector
有几项操作需要分配给它的项目。例如,每当vector
用完空间并需要重新调整大小时,它就会分配一个新的内存块,然后将其信息复制到新块。如果项类型为const
,则无法分配给新的内存块。
无论如何,将参数声明为const
并不是很重要。你试图得到什么行为?
答案 1 :(得分:1)
我认为错误的简洁理由如下:向量是一个可变数据结构,因此您可以更改向量的内容(例如,使用push_back
或erase
)。当您实例化矢量模板时,您实例化将尝试覆盖矢量内容的代码,这是您声明int *const
所禁止的。
如果你想要一个无法变异的向量,那么你可以使用对向量的常量引用,或者创建一个const向量并按值传递它。