static_cast<int&>(x);
Ничего не делает, поскольку x
уже имеет тип int&
при использовании в выражении.
static_cast<int&&>(x);
Приводит x
, значение l, к значению r,Это именно то, что std::move
делает и T&&
используется для реализации семантики перемещения.
std::swap
использует std::move
, потому что просто нет недостатка и возможного повышения производительности.Коры / назначения перемещения всегда должны быть по меньшей мере такими же эффективными, как и копии / назначения копирования.