我尝试编写一个迭代器,通过索引迭代容器。AIt和 aconst It都允许更改容器的内容。AConst_it和 aconst Const_it都禁止更改容器的内容。
之后,我尝试span<T>在容器上写一个。对于一个类型T不是常量,这两个const span<T>和span<T>允许改变所述容器的内容物。双方const span<const T>并span<const T>禁止改变容器的内容。
代码无法编译,因为:
// *this is const within a const method
// But It<self_type> requires a non-const *this here.
// So the code does not compile
It<self_type> begin() const { return It<self_type>(*this, 0); }
Run Code Online (Sandbox Code Playgroud)
如果我让构造函数It接受一个const容器,它看起来不对,因为迭代器可以修改容器的内容。
如果我去掉方法的const,那么对于非const 类型T,aconst span<T>不能修改容器。
It从继承Const_it到允许隐式转换It到Const_it模板实例化时。 …