引用c++枚举

Referring to c++ enums

本文关键字:枚举 c++ 引用      更新时间:2023-10-16

在c++11中,引用类中定义的枚举的c++"方式"(与c中使用的方式相反)是什么?如

foo.BAR vs Foo::States::BAR

我一直使用后者,但在某些地方,前者可能更有意义。

在所有的c++版本中,使用作用域语法的第二个版本(Foo::States::BAR)是更常规的,并且对于您的代码的未来维护者来说不会那么令人惊讶。由于该值是常量,因此不需要类的实例,因此这类似于通常使用作用域语法而不是实例语法调用静态方法。

的一个动机实例上调用静态方法可能会使它更类似与非静态方法调用(兼容),但这动机在很大程度上是无关紧要的枚举的例子,尤其因为未来可能的变化,让你的枚举变量会让它看起来"错了,"例如BAR全部大写是理解大多数程序员是一个恒定值,不是一个变量,它已自1970年也许是这样的。

第二种方法::肯定更可取,原因如下:

从概念上讲,枚举很像类型,它们指定某个变量可以取的值。但这并不依赖于该变量的实例。如果在类中放置枚举值,则枚举值不依赖于类的实例。在这方面,它们的行为非常像静态成员。因此,出于这个原因,我会选择与静态成员一致的语法。

按照c++标准,您可以使用foo.BAR,但是这种语法的通常含义使代码不太清楚。它看起来像您试图访问实例的成员,而实际上不是。这种语法使我在真正应该考虑枚举值的时候考虑成员变量。

如果枚举在作用域中,也可以使用foo->BAR,但我认为这会使意图更不清楚。这种语法让我想到指针,而实际上我应该考虑枚举值。

另外,如果你和其他程序员一起工作,他们会期望看到::访问枚举的方式。使用其他方式会让其他阅读你代码的人更加困惑。