如何使用const“this”指针获取非const迭代器?

时间:2012-03-29 07:33:06

标签: c++ casting const this

我的问题是使用const_cast<>。我有一个继承自vector的类。现在在我的一个成员函数中,当我使用this->begin()this是一个const指针时,它返回一个常量迭代器,但我想获得一个非const迭代器。代码看起来像......

class xyz : private std::vector<//something>
{
public:
 xyz();
 void doSomething();
}

void doSomething()
{
    xyz::iterator it;
    it = this->begin();
    *it.insert(something); //here is the problem and this where I need to use const_cast 
                           // and in a lot more places
}

在上面的函数中,由于this->begin()返回一个const迭代器,我被迫使用常量迭代器并在需要插入元素时进行类型转换。

我想在这个 - &gt; begin()使用const_cast但是我的朋友告诉我删除this指针的常量是个坏主意。如果是这样,那么又是什么方式?

1 个答案:

答案 0 :(得分:1)

如果向量是类的状态的一部分,则作为成员或 作为基础(尽管公开继承是非常糟糕的做法 vector),然后const成员函数不应修改它。如果 vector是状态的一部分,函数修改它,即函数 不应该是常量。

一般。有一些特殊情况,例如矢量 表示缓存状态,即逻辑计算,但是其状态 计算很昂贵。在这种情况下,您可以将矢量设为a 可变成员。但请确保该向量确实无法表示 &#34;可观察状态&#34;。

最后,您发布的代码似乎与之无关 问题。首先,唯一的功能是非const。而且 代码不会编译,原因有几个(在非成员中使用this 函数,在迭代器上调用成员函数insert 没有这样的成员等。)。