我的问题是使用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
指针的常量是个坏主意。如果是这样,那么又是什么方式?
答案 0 :(得分:1)
如果向量是类的状态的一部分,则作为成员或
作为基础(尽管公开继承是非常糟糕的做法
vector
),然后const
成员函数不应修改它。如果
vector是状态的一部分,函数修改它,即函数
不应该是常量。
一般。有一些特殊情况,例如矢量 表示缓存状态,即逻辑计算,但是其状态 计算很昂贵。在这种情况下,您可以将矢量设为a 可变成员。但请确保该向量确实无法表示 &#34;可观察状态&#34;。
最后,您发布的代码似乎与之无关
问题。首先,唯一的功能是非const。而且
代码不会编译,原因有几个(在非成员中使用this
函数,在迭代器上调用成员函数insert
没有这样的成员等。)。