非 class 枚举的等式的良好做法(左边的右值?)

Good practice with equalities for non-class enums (rvalues on left?)

我在一个正在慢慢将旧 c 更新为 c++ 的环境中工作。等式语句中经常使用非 class 枚举。

现在我敢肯定,任何上过编程课程或读过涵盖良好实践的书的人都知道左值和右值之间的相等性应该用左边的右值来构造,以防止意外更改数据,如果'= =' 替换为 '='。我从未见过用枚举完成的。简单的答案是使用 enum class ,但是对于大量的旧代码,这并不总是立即完成。由于枚举基本上只是一个整数,因此将右值也保留在枚举的左侧是否被认为是一种好的做法?

我写了一个小例子来更好地说明下面

#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;
}

would it be considered good practice to do keep rvalues on the left for enumerations as well?

实际上,即使是文字,这也不完全是 "good practice"。这个概念出现在过去,但对于大多数人来说,右边的文字更具可读性(也更符合变量,特别是变化最大的变量,最先出现的数学概念)。

并不总是需要为了可读性而牺牲防止打字错误。可读代码实际上是一个古老的概念,从未改变,也可能永远不会改变。所以最后,坚持使用更有意义且更易于维护的方法。防止这类错误应该留给编译器,任何体面的编译器都会在这些情况下触发警告。