"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 > Quais são as restrições e permissões para especialização no namespace std?

Quais são as restrições e permissões para especialização no namespace std?

Publicado em 15/11/2024
Navegar:775

 What are the Restrictions and Allowances for Specialization within the std Namespace?

Especialização no namespace std: restrições e permissões

Apesar da capacidade de adicionar especializações explícitas ao namespace std, certos modelos têm proibições explícitas . Compreender essas restrições é crucial para garantir a validade do código usando especializações de namespace padrão.

Modelos proibidos de especialização

  • numeric_limits: Não permitido para tipos padrão não aritméticos (por exemplo, complex).
  • shared_ptr: Deve ser CopyConstructible, CopyAssignable, LessThanComparable e conversível em bool.
  • weak_ptr: Deve ser CopyConstructible e CopyAssignable.
  • std::hash: As especializações devem atender aos requisitos do hash do modelo de classe.
  • type_traits : Especializações explícitas de qualquer modelo de classe em são indefinidas, a menos que especificado.
  • Locales: Possuem especializações obrigatórias.
  • istreambuf_iterator: Requer um construtor de cópia trivial, um construtor padrão constexpr e um destruidor trivial.
  • complex: Somente especializações float, double e long double são permitidas.
  • atomic: As especializações devem ter um construtor de cópia excluído, um operador de atribuição de cópia e um construtor de valor constexpr.
  • unary_function e binary_function: Obsoleto e não deve ser especializado.

Restrições adicionais

  • De acordo com a cláusula 17.6.4.2.1, o comportamento é indefinido ao adicionar declarações ou definições ao namespace std ou seus sub-namespaces. As exceções se aplicam apenas a especializações de modelo que dependem de tipos definidos pelo usuário e atendem aos requisitos padrão.
  • É proibido especializar explicitamente qualquer função de membro de um modelo de classe de biblioteca padrão, modelo de função de membro ou modelo de classe de membro.

Modelos permitidos para especialização

Modelos não explicitamente proibidos podem ser especializados se dependerem de tipos definidos pelo usuário e atenderem aos requisitos padrão do modelo original.

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