LINUX.ORG.RU

История изменений

Исправление proud_anon, (текущая версия) :

Функция итератора operator->() возвращает указатель.

Я не очень большой специалист по C++, но по-моему, функция Iterator::operator->() должна возвращать тип Iterator::pointer, который не обязан быть голым указателем.

Почему нельзя использовать сам итератор вместо указателя?

Если нельзя, попробуй сделать &(*iptr), но не знаю, может ли это вызвать UB и при каких условиях.

Исправление proud_anon, :

Функция итератора operator->() возвращает указатель.

Я не очень большой специалист по C++, но по-моему, функция Iterator::operator->() должна возвращать тип Iterator::pointer, который не обязан быть голым указателем.

Почему нельзя использовать сам итератор вместо указателя?

Исправление proud_anon, :

Функция итератора operator->() возвращает указатель.

Я не очень большой специалист по C++, но по-моему, функция Iterator::operator->() должна возвращать тип Iterator::pointer, который не обязан быть голым указателем.

Итак, во-первых, почему нельзя использовать сам итератор вместо указателя?

Во-вторых, если уж надо указатель, может быть, можно сделать &(*iptr)? Не знаю, правда, не является ли это UB.

Update: вот, выше уже привели пример с std::vector<bool>, когда &(*Iterator) вызовет неопределённое поведение.

Исходная версия proud_anon, :

Функция итератора operator->() возвращает указатель.

Я не очень большой специалист по C++, но по-моему, функция Iterator::operator->() должна возвращать тип Iterator::pointer, который не обязан быть голым указателем.

Итак, во-первых, почему нельзя использовать сам итератор вместо указателя?

Во-вторых, если уж надо указатель, может быть, можно сделать &(*iptr)? Не знаю, правда, не является ли это UB.