这是对的吗? 它与我的编译器编译,但我被告知它不适用于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版本)。
答案 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)
iterator
和const_iterator
(通常)是不同的类型,因此您无法转换引用。但是,iterator
可转换为const_iterator
,因此您可以执行
return funct(static_cast<ConstIterator>(iter));
或更安全,因为它只允许显式转换:
ConstIterator citer = iter;
return funct(citer);