Чи визначає стандарт точно, що я можу зробити з об'єктом після його переміщення? Раніше я думав, що все, що ти можеш зробити з переміщеним об'єктом - це знищити його, але цього було б недостатньо.
Наприклад, візьміть шаблон функції, swap
як визначено у стандартній бібліотеці:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Очевидно, має бути можливість присвоїти переміщеним об’єктам, інакше рядки 2 та 3 не зможуть. Тож що я ще можу зробити з переміщеними об'єктами? Де саме я можу знайти ці деталі у стандарті?
(До речі, чому це T c = std::move(a);
замість T c(std::move(a));
рядка 1?)
pop_back
переїхати зvector
. Але ви, звичайно, можете дізнатися, чи це такempty()
.