Na maioria das vezes que vejo std::move
aqui, está fazendo referência à <utility>
versão.
O std::move
in<algorithm>
realmente faz o que o nome sugere, move , enquanto o std::move
in<utility>
lança seu argumento para um xvalue, que é basicamente apenas uma etapa de pré-processamento para, eventualmente, mover o xvalue para um lvalue. Portanto, não é meio confuso que esses dois sejam nomeados move
quando a funcionalidade de cada um é diferente?
move
deveria ter sido chamado make_rvalue
ou algo assim. É frustrante explicar repetidamente que o único parâmetro std::move
não move nada.
<algorithm>
é simplesmente aquele <utility>
aplicado a toda uma gama.
<algorithm>
realmente executa a movimentação (supondo que exista um operador de atribuição de movimentação definido para o tipo que estamos movendo).
std::move
um operador em vez de uma função de biblioteca. Qualquer nome melhor do que std::move
teria sido mais longo, o que é péssimo.