std :: vector with const指向const对象的指针不能编译

时间:2014-09-03 13:46:32

标签: c++ pointers vector const

在尝试编译此方法时,我从gcc中得到了很多错误。 zones_是

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对象的向量吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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