我尝试从const
方法返回一对 vector 迭代器。
pair<vector<double>::iterator, vector<double>::iterator> Matrix::GetColumn(int j) const {
return pair<vector<double>::iterator, vector<double>::iterator>(values_.begin() + j * height_,
values_.begin() + (j + 1) * height_);
}
编译时出现以下错误matrix.cc:119:133: error: no matching function for call to ‘std::pair<__gnu_cxx::__normal_iterator<double*, std::vector<double> >, __gnu_cxx::__normal_iterator<double*, std::vector<double> > >::pair(__gnu_cxx::__normal_iterator<const double*, std::vector<double> >, __gnu_cxx::__normal_iterator<const double*, std::vector<double> >)’
return pair<vector<double>::iterator, vector<double>::iterator>(values_.begin() + j * height_, values_.begin() + (j + 1) * height_);
^
迭代器是vector<double>
开头和结尾的指针,允许用户编辑 vector 中的值。 AFAIK这不是const
的范围吗?该类如下所示:
class Matrix {
int height_;
int width_;
vector<double> values_;
}
当我删除const
时,错误消失了。
最佳答案
const函数无法更改类的状态,因此只能返回const_iterator。
如果要返回一个非常量迭代器,则会产生副作用,使外部作用域(调用代码)可以改变类的状态。这意味着const函数允许修改类的状态,即使它是间接的(即不在该函数的范围之内)。
这破坏了const关键字所隐含的约定。
关于c++ - 从const方法返回一对 vector 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62950529/