我试图从类方法返回一个 const 反向迭代器。但是当我将方法标记为
const
时,我的代码无法编译。如果没有 const
,代码编译时不会遇到任何问题。
知道为什么吗?
#include <iostream>
#include <vector>
template <class ValueType>
class DynamicDataComponent {
using ValuesType = std::vector<ValueType>;
using IteratorType = typename std::vector<ValueType>::reverse_iterator;
public:
DynamicDataComponent()
{
values.push_back(0);
values.push_back(1);
values.push_back(2);
values.push_back(3);
}
const IteratorType getRBeginIt() const {
return values.rbegin();
}
private:
ValuesType values;
};
int main() {
DynamicDataComponent<size_t> dataComponent;
std::cout << *dataComponent.getRBeginIt() << "\n";
}
你还需要定义一个const-iterator:
using ConstIteratorType = std::vector<ValueType>::const_reverse_iterator;
并定义您的
const
合格成员函数,如下所示:
ConstIteratorType getRBeginIt() const {
return values.rbegin(); // or even `return values.crbegin()` to be clear
}
请注意,const-iterator 不是
const iterator
。 ConstIteratorType
返回的getRBeginIt() const
实例不是const
(否则你将无法使用它进行迭代),但是当你引用迭代器时,它会返回一个const ValueType&
或const ValueType*
.