Это правильно?
Он компилируется с моим компилятором, но мне сказали, что это не с 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_cast
используется для удаления постоянства переменной. Это если у вас есть const A& a
ты можешь написать A& b = const_cast<A&>(a)
, Теперь вы сможете изменить b
или вызовите неконстантные методы для этого.
В этом случае вы строите const_iterator
от обычного iterator
и это всегда возможно даже без использования const_cast
, Имейте в виду, что это два разных типа и просто const_iterator
случилось быть конструируемым из iterator
Константность C ++ в этом случае не имеет большого значения.
iterator
а также const_iterator
(в общем) разные типы, поэтому вы не можете разыгрывать ссылки. Тем не мение, iterator
конвертируется в const_iterator
так что вы могли бы сделать
return funct(static_cast<ConstIterator>(iter));
или, более безопасно, поскольку он допускает только явные преобразования:
ConstIterator citer = iter;
return funct(citer);