Разрешены ли свопы самостоятельно проверять?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разрешены ли свопы самостоятельно проверять?

Сообщение Anonymous »

В то время как проверка и другие! = Это , как правило, не является хорошей идеей в задании Move/Copy, и идиома копирования и замены должна быть предпочтительной, разрешена ли это для замены для выполнения такой проверки?

Код: Выделить всё

// same for move, can handle both with `(cls other)`
cls& operator=(const cls& other) {
cls temp{ other };
swap(*this, other);
return *this;
}
< /code>
std::swap
:

Код: Выделить всё

template 
void swap(T& lhs, T& rhs) {
T tmp{ std::move(lhs); }  // move ctor
lhs = std::move(rhs);  // move assign
rhs = std::move(tmp);  // move assign
}  // temp dtor
< /code>
While clearly not helping in assignment which constructs a new temporary, sticking an if (&lhs == &rhs) { return; }
В верхней части SWAP может сохранять операции в каком -то общем коде.
разрешает ли стандарт это, или он говорит, что (2+1) движения всегда выполняются? Есть ли причины, почему это не сработает?

Подробнее здесь: https://stackoverflow.com/questions/797 ... self-check
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»