带有指向const对象的const指针的std::vector不编译

std::vector with const pointer to const object does not compile

本文关键字:const vector 编译 std 指针 对象      更新时间:2023-10-16

当我试图编译这个方法时,我从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类型的指针)

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

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

相关文章: