Maison  >  Article  >  développement back-end  >  Quand un « opérateur bool » explicite fonctionne-t-il sans conversion en C ?

Quand un « opérateur bool » explicite fonctionne-t-il sans conversion en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 23:46:31328parcourir

 When Does an Explicit `operator bool` Work Without Casting in C  ?

Opérateur explicite bool sans conversion

Lors de la conception d'une classe qui a une conversion explicite en bool, on peut se demander où elle peut être utilisée comme booléen sans conversion explicite .

Conversion contextuelle en bool

La norme C définit des scénarios spécifiques dans lesquels une valeur peut être « convertie contextuellement en bool ». Ces situations se répartissent en quatre grandes catégories :

1. Déclarations :

  • if (t) /* déclaration */;
  • pour (; t;) /* déclaration */;
  • while ( t) /* instruction */;
  • do { /* block */ } while (t);

2. Expressions :

  • !t
  • t && t2
  • t || t2
  • t ? "vrai" : "faux"

3. Tests au moment de la compilation :

  • static_assert(t);
  • nosauf(t)
  • explicit(t)
  • if constexpr (t)

4. Algorithmes et concepts :

  • NullablePointer T
  • std::remove_if(...)
  • std::sort(...)

Mises en garde concernant les opérateurs de conversion const et non-const

Il convient de noter qu'une combinaison d'opérateurs de conversion const et non-const peut prêter à confusion. Reportez-vous aux questions connexes ci-dessous pour plus d'informations :

  • [Pourquoi la conversion explicite bool() ne se produit-elle pas dans la conversion contextuelle ?](https://stackoverflow.com/questions/5580156/why- Doesnt-explicit-bool-conversion-happen-in-contextual-conversion)
  • [Pourquoi l'opérateur explicite bool n'agit-il pas comme prévu ?](https://stackoverflow.com/questions/26578447/why -l'opérateur-bool-explicite-n'a-t-il-pas-d'effet-comme-attendu)

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