Maison > développement back-end > C++ > Comment garantir l'exécution exclusive des branches Constexpr if/else en C ?

Comment garantir l'exécution exclusive des branches Constexpr if/else en C ?

Linda Hamilton
Libérer: 2024-11-28 12:07:10
original
854 Les gens l'ont consulté

How to Guarantee Exclusive Execution of Constexpr if/else Branches in C  ?

Assurer l'exécution exclusive des branches Constexpr if/else

En C , lors de la construction d'une série d'instructions constexpr if/else, il est souhaitable de assurez-vous que la branche else n'est jamais exécutée. Cela se fait généralement en répétant l'évaluation de toutes les conditions de la clause else, comme le montre :

static_assert(condition1 || condition2 || condition3);
Copier après la connexion

Cependant, une telle répétition peut devenir fastidieuse, en particulier avec des conditions complexes.

Utilisation d'instructions dépendantes

Une solution plus élégante consiste à rendre l'instruction supprimée dépendante des paramètres du modèle. Ceci est réalisé en :

  1. Définir un modèle constexpr std::false_type qui renvoie toujours false :
template <class...> constexpr std::false_type always_false{};
Copier après la connexion
  1. Utiliser ce modèle dans la clause else de l'instruction if/else :
else {       
    static_assert(always_false<T>);
}
Copier après la connexion

Cette approche est valide parce que :

  • Selon [temp.res]/8 de la norme C, le programme est mal formé si aucune spécialisation valide ne peut être générée pour l'instruction constexpr if/else dans un modèle.
  • Étant donné que le modèle always_false renvoie toujours false, aucune spécialisation ne peut en aucun cas être générée pour la clause else.
  • Par conséquent, la clause else sera ne jamais être exécuté au moment de la compilation.

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