引用c++枚举
Referring to c++ enums
在c++11中,引用类中定义的枚举的c++"方式"(与c中使用的方式相反)是什么?如
foo.BAR vs Foo::States::BAR
我一直使用后者,但在某些地方,前者可能更有意义。
在所有的c++版本中,使用作用域语法的第二个版本(Foo::States::BAR
)是更常规的,并且对于您的代码的未来维护者来说不会那么令人惊讶。由于该值是常量,因此不需要类的实例,因此这类似于通常使用作用域语法而不是实例语法调用静态方法。
的一个动机实例上调用静态方法可能会使它更类似与非静态方法调用(兼容),但这动机在很大程度上是无关紧要的枚举的例子,尤其因为未来可能的变化,让你的枚举变量会让它看起来"错了,"例如BAR
全部大写是理解大多数程序员是一个恒定值,不是一个变量,它已自1970年也许是这样的。
第二种方法::
肯定更可取,原因如下:
按照c++标准,您可以使用foo.BAR
,但是这种语法的通常含义使代码不太清楚。它看起来像您试图访问实例的成员,而实际上不是。这种语法使我在真正应该考虑枚举值的时候考虑成员变量。
如果枚举在作用域中,也可以使用foo->BAR
,但我认为这会使意图更不清楚。这种语法让我想到指针,而实际上我应该考虑枚举值。
另外,如果你和其他程序员一起工作,他们会期望看到::
访问枚举的方式。使用其他方式会让其他阅读你代码的人更加困惑。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素