Maison > développement back-end > C++ > Comment puis-je garantir des chemins exclusifs Constexpr if-else en C ?

Comment puis-je garantir des chemins exclusifs Constexpr if-else en C ?

Mary-Kate Olsen
Libérer: 2024-11-27 17:15:13
original
251 Les gens l'ont consulté

How Can I Guarantee Exclusive Constexpr if-else Paths in C  ?

Garantir des chemins exclusifs Constexpr if-else

Dans les clauses constexpr if-else, il est essentiel de s'assurer que le cas else n'est jamais pris. Traditionnellement, on peut utiliser static_assert(false); de générer une erreur dans de tels cas. Cependant, cette approche génère une erreur de compilation qui affirme de manière inattendue que l'instruction est vraie.

Au lieu de cela, pour garantir que le cas else est inaccessible, l'instruction rejetée doit être rendue dépendante des paramètres du modèle. Ceci peut être réalisé en utilisant le modèle always_false, qui renvoie std::false_type quels que soient les arguments du modèle.

template <class... T> constexpr std::false_type always_false{};

if constexpr (condition1) {
    // ...
} else if constexpr (condition2) {
    // ...
} else if constexpr (condition3) {
    // ...
} else {
    static_assert(always_false<T...>);
}
Copier après la connexion

Cette solution est basée sur le fait qu'en C , un programme est considéré comme mal formé si aucun une spécialisation valide peut être générée pour un modèle ou une sous-instruction constexpr if-else. Par conséquent, lorsque la clause else devient inaccessible, le compilateur émettra une erreur de compilation, garantissant que le code reste valide.

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