0

这个对吗?它可以用我的编译器编译,但有人告诉我它不能用 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 版本)。

4

2 回答 2

2

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

const_iterator在这种情况下,您从常规构造 a ,iterator即使不使用 a 也总是可能的const_cast。请记住,这是两种不同的类型,只是const_iterator碰巧可以从iteratorC++ 构造,在这种情况下,常量性并没有太多关系。

于 2013-12-19T13:21:50.327 回答
2

iterator并且const_iterator(通常)是不同的类型,因此您不能转换引用。但是,iterator可转换为const_iterator,因此您可以这样做

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

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

ConstIterator citer = iter;
return funct(citer);
于 2013-12-19T13:22:22.740 回答