5 votes

L'opérateur conditionnel ( ? : ) en C++ peut-il être compilé ?

L'opérateur ternaire (conditionnel) peut-il être utilisé comme un analogue de constexpr if() introduite dans C++17 ?

Je voudrais ajouter une certaine conditionnalité à l'initialisation des variables membres dans un modèle. L'expression suivante serait-elle résolue au moment de la compilation ou de l'exécution ? Dans l'affirmative, existe-t-il un autre opérateur qui se résout au moment de la compilation, de sorte que la spécialisation des modèles puisse être évitée ?

template<int a>
struct hello {
    const static int n = (a != 0) ? 10 : 20;
}

6voto

Nicol Bolas Points 133791

Cela dépend de ce que vous entendez par "analogue à". constexpr if() ". if constexpr nécessite que la condition est une expression constante. Il dispose également de certains privilèges dans le code modèle pour écarter les branches non prises.

?: ne dispose pas de cette fonctionnalité.

Cependant ?: peut très bien apparaître dans des expressions constantes, et il l'a toujours fait. Cela ne rend pas une expression non-constante.

2voto

Konrad Rudolph Points 231505

Oui, c'est tout à fait possible et, en fait, il pouvait déjà être utilisé dans C++11 avant l'introduction de l'option if constexpr et même avant C++11 dans les expressions constantes, comme celle de votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X