如果我取消注释
foo::const_iterator j = f.begin();
这一行,为什么下面的代码无法编译呢?但是,如果我使用foo::const_iterator j = f.cbegin();
这行代码,就可以成功编译。我试图让这行代码和我的std::vector
例子一样正常工作。#include <vector>
struct foo {
struct node { };
node *first = nullptr, *last = nullptr;
struct base_iterator {
node* ptr;
base_iterator (node* n) : ptr(n) { }
};
struct iterator : base_iterator { using base_iterator::base_iterator; };
struct const_iterator : base_iterator { using base_iterator::base_iterator; };
iterator begin() { return iterator(first); }
const_iterator begin() const { return const_iterator(first); }
const_iterator cbegin() const { return const_iterator(first); }
};
// Test
int main() {
foo f;
foo::iterator i = f.begin();
// foo::const_iterator j = f.begin(); // Won't compile because f is not const.
// foo::const_iterator j = f.cbegin(); // Will compile fine.
std::vector<int> v;
std::vector<int>::const_iterator it = v.begin(); // Compiles even though v is not const.
}
std::vector<int>::const_iterator
一样工作? - prestokeysconst_iterator
类中定义运算符const_iterator& operator=(const iterator& other)
,或者类似的复制构造函数? - prestokeys