"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que `std::move` é chamado de `std::move` se na verdade não move nada?

Por que `std::move` é chamado de `std::move` se na verdade não move nada?

Publicado em 2024-11-16
Navegar:125

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

Por que std::move é chamado de std::move?

A função std::move, apesar do nome, não realmente mover qualquer coisa. Ele apenas converte um lvalue (uma expressão referente a um objeto) em um rvalue (uma expressão que representa um objeto temporário). Essa conversão é realizada por meio de uma conversão para a categoria xvalue, que é distinta de lvalues ​​e prvalues.

O motivo dessa escolha de nomenclatura remonta à história do conceito. Originalmente, a operação de movimentação foi introduzida como uma forma de trocar valores de forma eficiente, sem copiá-los. A sintaxe inicial para isso envolvia converter lvalues ​​em rvalues ​​usando static_cast. Para melhorar a legibilidade e transmitir a intenção dessas conversões, a palavra-chave move foi introduzida como açúcar sintático para static_cast.

No contexto da época, usar o termo "move" pretendia indicar o propósito dessas conversões : para ativar a semântica de movimentação. A consequência é que o código transmite não a ação técnica precisa (transmitir para um rvalue), mas sim o resultado desejado (mover o objeto).

Ao longo dos anos, o conceito de lvalues ​​e rvalues ​​evoluiu para o categorias de valor que temos hoje, com xvalues ​​representando objetos que foram convertidos em rvalues. Como resultado, a palavra-chave move pode ser vista como enganosa, pois implica apenas uma ação que pode ou não ocorrer nos bastidores.

No entanto, a opção de usar a palavra-chave move foi mantida para preservar a legibilidade. e evite a confusão que pode surgir de uma sintaxe desconhecida como cast_to_xvalue. A função std::move continua sendo um utilitário valioso que permite aos programadores expressar a semântica de movimento de forma concisa, mesmo que seu nome não capture perfeitamente os detalhes técnicos de sua operação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3