Je travaille dans un environnement qui met lentement à jour les anciens c vers C++. Les enums non-classe sont souvent utilisés dans les déclarations d'égalité. Maintenant, je suis sûr que quiconque a suivi un cours de programmation ou a lu un livre qui couvre les bonnes pratiques sait que les égalités entre les valeurs et les valeurs doivent être structurées avec la valeur à gauche pour éviter des modifications accidentelles des données 'est substitué par' = '. Je n'ai jamais vu cela avec des énumérations. La réponse facile est d'utiliser la classe enum mais cela ne peut pas toujours être fait immédiatement avec de grands corps de code plus ancien. Puisqu'une énumération est fondamentalement juste un nombre entier, est-ce que cela serait considéré comme une bonne pratique de garder également les valeurs à gauche pour les énumérations?Bonne pratique avec des égalités pour les enums hors classe (rvalues à gauche?)
j'ai écrit un petit exemple pour mieux illustrer ci-dessous
#include <iostream>
using namespace std;
int number;
enum Color { RED, GREEN, BLUE };
int main() {
number = 1234;
Color color = BLUE;
// This is done
if (555 == number) { /*...*/ }
// So that this never accidently happens
if (number = 555) { /*...*/ }
// Resulting in this (number changed to 555)
cout << number <<endl;
// I have never seen this done
if (RED == color ) { /*...*/ }
// should it be to, prevent this
if (color = RED) { /*...*/ }
//Resulting in this (color changed to 0 or RED)
cout << color <<endl;
return 0;
}
Vous parlez des comparaisons de "style Yoda", que certains considèrent comme obsolètes de nos jours car les compilateurs modernes ont des avertissements sur les affectations suspectes. Certains sont en désaccord. –
* "Je suis sûr que quiconque a suivi un cours de programmation ou lu un livre qui couvre les bonnes pratiques sait que les égalités doivent être structurées avec la valeur à gauche pour éviter les '='." * Ce n'est pas vrai. Et tout compilateur décent déclenchera un avertissement pour ces cas de toute façon. – sidyll
^* Quod Erat Demonstrandum * :) –