【问题标题】:Why is vector<int * const> illegal/illogical? [duplicate]为什么 vector<int * const> 非法/不合逻辑? [复制]
【发布时间】:2013-12-26 20:43:49
【问题描述】:

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

我写道:

std::vector<int * const> pointers;

但无法编译(使用 GCC)。

我收到 5 个错误,首先是: “初始化 'void operator delete(void*)' 的参数 1” 和 "从 'const void*' 到 'void*' 的无效转换"

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

【问题讨论】:

  • 您在哪里以及如何使用pointers??注意std::vector 对它可以存储的元素有一些限制!!
  • 这不是不合逻辑,只是不受支持,目前认为它不够重要。

标签: c++ pointers vector constants std


【解决方案1】:

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

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

无论如何,将参数声明为const 并没有多大意义。您试图获得什么行为?

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2023-01-20
      • 2014-06-14
      相关资源
      最近更新 更多