Maison >développement back-end >C++ >Au-delà des instructions « if » : où d'autre un type avec une conversion « bool » explicite peut-il être utilisé sans conversion ?

Au-delà des instructions « if » : où d'autre un type avec une conversion « bool » explicite peut-il être utilisé sans conversion ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 04:33:021065parcourir

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

Conversion contextuelle en bool autorisée sans transtypage

Votre classe définit une conversion explicite en bool, vous permettant d'utiliser son instance 't' directement dans les instructions conditionnelles. Cependant, cette conversion explicite pose la question : où d'autre ne peut-on pas utiliser "bool" sans transtypage ?

Scénarios de conversion contextuelle

La norme C spécifie quatre Principaux scénarios dans lesquels une valeur peut être convertie contextuellement en bool :

Déclarations :

  • instructions if, while, for, do-while

    <code class="cpp">if (t)
      /* statement */;</code>

Expressions :

  • Négation (!), ET logique (&&), OU logique (||) , opérateur ternaire (?)

    <code class="cpp">!t
    t && t2</code>

Tests au moment de la compilation :

  • static_assert, nosauf, explicite, if constexpr (nécessite l'opérateur de conversion constexpr)

    <code class="cpp">static_assert(t);
    noexcept(t)</code>

Algorithmes et concepts :

  • NullablePointer, prédicat ou comparateur arguments dans les algorithmes STL

    <code class="cpp">NullablePointer T
    std::remove_if(first, last, [&](auto){ return t; });</code>

Remarques supplémentaires :

  • Les conversions restrictives à partir d'entiers autres que 0 et 1 ne sont pas autorisées dans tests de compilation (à partir de C 26).
  • Mélanger les opérateurs de conversion const et non-const peut prêter à confusion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn