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
Mary-Kate Olsenoriginal
2024-11-27 17:15:13289parcourir

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...>);
}

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!

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