Maison >développement back-end >C++ >L'idiome Safe-Bool est-il obsolète en C 11 et au-delà ?

L'idiome Safe-Bool est-il obsolète en C 11 et au-delà ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 02:27:12717parcourir

Is the Safe-Bool Idiom Obsolete in C  11 and Beyond?

L'idiome Safe-Bool est-il une relique du C 11 ?

L'idiome Safe-Bool, autrefois largement employé en C, a fait face à examen minutieux à la lumière de l'introduction par C 11 d'opérateurs de conversion booléens explicites. Selon la norme C 11 (§4 [conv] p3), les expressions peuvent être implicitement converties en type si une déclaration de variable correspondante est bien formée. Ce concept, appelé « conversion contextuelle », permet l'affectation directe d'une valeur à une variable booléenne.

Le remplacement Safe-Bool

Avant C 11 , l'idiome safe-bool a été utilisé pour fournir un contrôle explicite sur les conversions booléennes. Cela impliquait de définir une fonction membre avec un nom explicite comme is_valid() ou is_active() qui renvoyait une valeur booléenne. Cependant, avec l'introduction par C 11 de l'opérateur explicite bool() const;, les développeurs peuvent désormais définir un opérateur de conversion booléen explicite pour leurs classes.

Conversion contextuelle en action

Les expressions impliquant les constructions de langage suivantes nécessitent une conversion contextuelle en booléen :

  • if, while, for (§6.4 [stmt.select] p4)
  • opérateurs logiques binaires && et || (§5.14 [expr.log.et/ou] p1 pour les deux)
  • opérateur de négation logique ! (§5.3.1 [expr.unary.op] p9)
  • opérateur conditionnel ? : (§5.14 [expr.cond] p1)
  • static_assert (§7 [dcl.dcl] p4 )
  • nosauf (§15.4 [sauf.spec] p2)

La réponse

L'idiome safe-bool est en effet considéré comme obsolète en C 11. L'introduction d'opérateurs de conversion booléens explicites fournit une solution plus propre et plus approche logique pour contrôler les conversions booléennes. En permettant l'affectation directe à des variables booléennes, la conversion contextuelle élimine le besoin de l'idiome safe-bool et simplifie la lisibilité du code.

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