Каков результат присваивания std :: vector :: begin ()?
Результатом выражения присваивания (результат отбрасывается в вашем примере) является присвоенныйзначение.В этом случае результат совпадает с v.end() - 2
.
. Обратите внимание, что, поскольку begin()
возвращает значение, это назначение только изменяет возвращенный временный объект.Назначение не изменяет вектор в любом случае.Учитывая, что временный объект отбрасывается, назначение на практике не имеет наблюдаемых эффектов.
Кроме того, это назначение может быть некорректным, если стандартная библиотека выбрала для реализации std::vector::iterator
в качестве указателя.
Почему я могу присвоить begin()
Поскольку
- Итераторы могут быть назначены.
- Можно присвоить значения типа класса † .
- Итератор относится к типу класса.
, но он ничего не делает с элементами?
Потому что назначение итератора не изменяет элемент, на который указывает итератор.Вместо этого присваивание изменяет, на какой объект указывает итератор.
Так что, как я знаю, мы не можем присвоить rvalue
В общем, это неправильно.В частности, это неверно для типов классов † .
† Если только оператор присваивания класса не имеет lvalue-ref-qualifier (и имеетнет перегрузки с квалификацией rvalue-ref), что нетрадиционно.