"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 > Além das declarações `if`: onde mais um tipo pode um tipo com uma conversão explícita de` bool` ser usada sem fundir?

Além das declarações `if`: onde mais um tipo pode um tipo com uma conversão explícita de` bool` ser usada sem fundir?

Publicado em 2025-01-24
Navegar:526

Beyond `if` Statements: Where Else Can a Type with an Explicit `bool` Conversion Be Used Without Casting?

Conversão contextual para bool permitida sem conversão

Sua classe define uma conversão explícita para bool, permitindo que você use sua instância 't' diretamente em instruções condicionais. No entanto, esta conversão explícita levanta a questão: onde mais 't' pode ser usado como um bool sem conversão?

Cenários de conversão contextual

O padrão C especifica quatro principais cenários onde um valor pode ser convertido contextualmente para bool:

Declarações:

  • if, while, for, do-while declarações

    if (t)
      /* statement */;

Expressões:

  • Negação (!), lógico AND (&&), lógico OU (||), operador ternário (?)

    !t
    t && t2

Testes em tempo de compilação:

  • static_assert, noexcept, explicit, if constexpr (requer conversão constexpr operador)

    static_assert(t);
    noexcept(t)

Algoritmos e conceitos:

  • NullablePointer, argumentos de predicado ou comparadores em algoritmos STL

    NullablePointer T
    std::remove_if(first, last, [&](auto){ return t; });

Notas adicionais:

  • Conversões restritivas de números inteiros diferentes de 0 e 1 não são permitidas em testes de tempo de compilação (C 26 em diante).
  • Mixagem Operadores de conversão const e não const podem causar confusã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