C ++ const-cast一个引用

时间:2013-12-19 13:17:44

标签: c++ const-cast

这是对的吗? 它与我的编译器编译,但我被告知它不适用于AIX。

typedef std::vector<Entry>::iterator Iterator;
typedef std::vector<Entry>::const_iterator ConstIterator;

bool funct(ConstIterator& iter) const;
inline bool funct(Iterator& iter){return funct(const_cast<ConstIterator&>(iter));}

如何让我的代码在AIX平台上编译? (除了使用Ctrl-C Ctrl-V重新实现非const版本)。

2 个答案:

答案 0 :(得分:2)

const_cast用于删除变量的常量。也就是说,如果你有const A& a,你可以写A& b = const_cast<A&>(a)。现在,您将能够修改b或在其上调用非const方法。

在这种情况下,您可以从常规const_iterator构建iterator,即使不使用const_cast,这也是可行的。请记住,这些是两种不同的类型,简单地const_iterator恰好可以从iterator C ++构造。在这种情况下,const-ness没有太多事情可做。

答案 1 :(得分:2)

iteratorconst_iterator(通常)是不同的类型,因此您无法转换引用。但是,iterator可转换为const_iterator,因此您可以执行

return funct(static_cast<ConstIterator>(iter));

或更安全,因为它只允许显式转换:

ConstIterator citer = iter;
return funct(citer);