"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 as implementações de movimentação padrão estavam ausentes nos primeiros rascunhos do C++ 11?

Por que as implementações de movimentação padrão estavam ausentes nos primeiros rascunhos do C++ 11?

Publicado em 19/11/2024
Navegar:657

Why Were Default Move Implementations Absent in Early C  11 Drafts?

Por que as implementações de movimentação padrão estão ausentes dos primeiros rascunhos do C 11?

Nas primeiras versões do padrão C 11, a geração implícita de construtores de movimentação e operadores de atribuição era um tema de debate. Isso levou a mudanças nos rascunhos subsequentes, resultando no seguinte comportamento nos compiladores atualmente disponíveis:

Semântica de movimentação implícita

Desde a versão de novembro do Padrão C (N3225), construtores de movimentação implícita e atribuição operadores podem ser gerados sob as seguintes condições:

  • A classe não possui construtor de cópia declarado pelo usuário.
  • A classe não possui operador de atribuição de cópia declarado pelo usuário.
  • A classe não possui operador de atribuição de movimentação declarado pelo usuário.
  • A classe não possui destruidor declarado pelo usuário.
  • O construtor de movimentação não teria ser implicitamente definido como excluído.

Explicando a ausência nos primeiros rascunhos

A decisão de não incluir a mudança padrão implementações de construtor/atribuição nos primeiros rascunhos foi resultado de preocupações sobre o potencial de confusão e comportamento inesperado. No entanto, as revisões subsequentes abordaram essas preocupações, restringindo as condições para a geração de movimentação implícita. , você pode usar a [macro do GManNickG](https://stackoverflow.com/a/12316884/8674521). Esta macro gera a semântica de movimentação necessária para sua classe.

Ao implementar a semântica de movimentação, você também pode optar por não fornecer uma função de membro de troca.

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