【发布时间】:2010-08-31 22:08:03
【问题描述】:
考虑这样的方法:
void Parent::removeChild(Child *child)
{
children.removeAll(child);
}
在这种情况下,由于 child 本身永远不会被修改,因此可以将其设为 const 指针。但由于 children 属于 QList 类型,removeAll() 采用对 non-const 指针的 const 引用。
推荐的处理方法是什么?跳过方法参数的常量或 const_cast 常量指针以适应 removeAll() 方法?
【问题讨论】:
-
当您说“常量指针”时,您是指
const Child *还是Child * const?当您说“对非 const 指针的 const 引用”时,您的意思是Child * const &还是别的什么?存在固有的歧义,因为“const 指针”严格表示T * const,但在随意使用时可能表示const T *。 -
很抱歉给您带来了困惑。我的意思是参数的“指向 const Child 的指针”,而
removeAll()将采用“对指向非 const child 的指针的 const 引用”。我总是忘记哪个语法是哪个。所以我说的显然不是指针值本身,而是指向的对象,孩子。 -
我不清楚这一点。什么是 QList,它有什么作用,它来自哪里?
-
好的,我查了一下,这是一个QList这个事实与指针是否为const无关。大概
children被声明为QList<Child *>或类似的东西,这就是相关的。在这里显示children的实际声明可以避免混淆。
标签: c++ const-correctness