【发布时间】:2012-03-29 07:33:05
【问题描述】:
我的问题是使用 const_cast。我有一个从向量继承的类。现在在它的一个成员函数中,当我使用this->begin()、this 作为 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()返回一个常量迭代器,我不得不使用一个常量迭代器并在需要插入元素时进行类型转换。
我曾想过在 this->begin() 处使用 const_cast,但我的朋友告诉我,删除 this 指针的 const 是个坏主意。如果是这样,那还有什么办法呢?
【问题讨论】:
-
其实你用我有一个继承自vector的类开了一罐虫子,为什么你继承自
std::vector?它不适用于继承。 -
@Als :我需要一个从向量继承的类,以便类本身充当向量,您能否更具体地说明为什么继承我不是一个好主意,所以请帮忙我。
-
@Als :好吧,我一定会那样使用它,但是我面临的 const_cast 问题有解决方案吗?
-
@Als:您链接的答案包含极具争议的个人信念,没有说服力。实际上,并非每个类都需要虚拟析构函数,并且对于每个功能,人们都尽量避免在该功能有用时存在特定情况。同样适用于从容器继承。
-
@SigTerm:“只要不使用指向向量的指针删除派生类,就不会引起问题”。你怎么知道你的程序员同事或你的 API 用户不会这样做?我的观点是最好避免任何对象切片的机会。
标签: c++ casting constants this