【发布时间】:2017-12-06 12:47:39
【问题描述】:
假设我定义了某种容器A:
struct A
{
iterator begin(){ return iterator(this,0); }
const iterator cbegin() const { return iterator(this, last());}
//...
};
假设现在我要声明iterator(A 的一部分):
struct A::iterator
{
iterator ( A* ptr, size_t idx){};
//...
};
我会使用如下:
const A a;
A::iterator it = a.cbegin();
这不起作用,因为传递给iterator 的构造函数的指针是非常量的。
理想的解决方案是返回一个 const 对象的特定构造函数:
const A::iterator( const StringUtfInterface *p, size_t s); //Not valid
这(显然)在 C++ 中无效。我想知道这个问题的解决方法是什么?
我真的需要声明/定义一个新的 const_iterator 类吗? const关键字不够用?
相关问题(但不一样):
【问题讨论】:
-
iterator、const iterator 和 const_iterator 之间的区别与常规指针 (
T *)、const 指针 (T * const) 和指向 const 的指针 (@987654333) 之间的区别相同@)。你需要这三种。
标签: c++ constructor iterator constants const-iterator