【问题标题】:std::vector with const pointer to const object does not compile带有指向 const 对象的 const 指针的 std::vector 无法编译
【发布时间】:2014-10-28 01:21:54
【问题描述】:

在尝试编译此方法时,我从 gcc 收到了很多错误。 zone_ 是一个

std::map<int,std::vector<Zone const * const>>

这是 MyClass 的私有成员。

//get unique zones
std::vector<Zone const* const> MyClass::getZones() const {
  std::vector<Zone const * const> zones; //why can I not do this???
  std::map<Zone const * const,int> zone_set;
  for(auto & pair : zones_) {
      for(Zone const * const z : pair.second) {
          if(zone_set.count(z) == 0) {
            zone_set[z] = 1;
            zones.push_back(z); //cannot do this
          }
      }
  }
return zones;
}

我可以有一个指向 const 对象的 const 指针向量吗?

【问题讨论】:

  • 你能发布错误吗?我对他们很好奇

标签: c++ pointers vector constants


【解决方案1】:

不,元素类型不能是 const(虽然可以是指向 const 类型的指针)

也没有必要这样做,因为当您返回对向量的 const 引用时,对元素的访问将是 const_reference:http://www.cplusplus.com/reference/vector/vector/operator[]

【讨论】:

    【解决方案2】:

    没有。一般来说,向量的元素不能是const,因为当向量的数组需要重新分配时,它们必须被移动。你必须存储Zone const *;或者,如果您确实需要常量元素,也可以使用不同的容器类型(listdeque 或可能的set)。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 2012-11-07
      • 2010-09-18
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多