gpt4 book ai didi

c++ - 在这里进行 const 转换安全吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:30 24 4
gpt4 key购买 nike

我已经编写了自己的通用树实现,并且在为其编写迭代器时,我在 const 正确性方面遇到了麻烦。我目前遇到的问题如下:

这是我写的 DFS 迭代器的头文件:

template<class Item>
class DFSIterator
{
public:
DFSIterator(const Item& rRootNode);
~DFSIterator();
DFSIterator* First();
DFSIterator* operator++(int rhs);
Item* operator*() const;
Item* operator->() const;
bool isDone() const;

template <class Node> friend class Node;

private:
void initListIterator(const Item* currentNode);

bool m_bIsDone;
const Item* m_pRootNode;
const Item* m_pCurrentNode;
ListIterator<Item>* m_pCurrentListIter;
std::map<const Item*, ListIterator<Item>*> m_listMap;
};

所以我关心的是解引用运算符:

template<class Item>
Item* DFSIterator<Item>::operator*() const
{
if(isDone())
{
return NULL;
}
else
{
return const_cast<Item*>(m_pCurrentNode);
}
}

在那里做一个 const_cast 合适吗?我想知道如果用户将 const 对象放入容器中是否会导致问题?

最佳答案

由于您的构造函数使用const Item,您的运算符应该返回一个const 指针。

如果你想返回一个非常量项,你应该为你的构造函数使用一个非常量参数。一个解决方案是让一个基类使用 const 对象,一个子类使用非 const 对象(在某种程度上它是在 Objc 中完成的,例如 NSString 和 NSMutableString)。

关于c++ - 在这里进行 const 转换安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com