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!