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
Libérer: 2024-10-30 04:33:02
original
1066 Les gens l'ont consulté

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>
    Copier après la connexion

Expressions :

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

    <code class="cpp">!t
    t && t2</code>
    Copier après la connexion

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>
    Copier après la connexion

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>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal