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).

0

Решение

const_cast используется для удаления постоянства переменной. Это если у вас есть const A& a ты можешь написать A& b = const_cast<A&>(a), Теперь вы сможете изменить b или вызовите неконстантные методы для этого.

В этом случае вы строите const_iterator от обычного iterator и это всегда возможно даже без использования const_cast, Имейте в виду, что это два разных типа и просто const_iterator случилось быть конструируемым из iterator Константность C ++ в этом случае не имеет большого значения.

2

Другие решения

iterator а также const_iterator (в общем) разные типы, поэтому вы не можете разыгрывать ссылки. Тем не мение, iterator конвертируется в const_iteratorтак что вы могли бы сделать

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

или, более безопасно, поскольку он допускает только явные преобразования:

ConstIterator citer = iter;
return funct(citer);
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector