Из n3290, 17.6.5.15 Состояние перемещенных из библиотеки типов библиотек [lib.types.movedfrom]
- Объекты типов, определенных в стандартной библиотеке C ++, можно перемещать из (12.8).Операции перемещения могут быть явно указаны или неявно сгенерированы.Если не указано иное, такие перемещенные объекты должны быть помещены в действительное, но неопределенное состояние.
Поскольку состояние действительно, это означает, что вы можете безопасно работать с v2
(например,присвоение ему, которое вернуло бы его в известное состояние).Однако, поскольку оно не указано, это означает, что вы не можете, например, полагаться на какое-либо конкретное значение для v2.empty()
, пока оно находится в этом состоянии (но его вызов не приведет к сбою программы).
Обратите внимание, что этоСемантика аксиомы перемещения («перемещенные объекты остаются в допустимом, но неопределенном состоянии») - это то, к чему должен стремиться весь код (большую часть времени), а не только компоненты стандартной библиотеки.Так же, как семантика конструкторов копирования должна делать копию, но не применяется к.