c++ - C++17:仍然使用枚举作为常量?
问题描述
我习惯于enum
用作常量——它们写起来很快,可以放在 .h 文件中,并且工作正常。
enum {BOX_LEFT=10, BOX_TOP=50, BOX_WIDTH=100, BOX_HEIGHT=50};
enum {REASONS_I_LIKE_ENUM_AS_CONSTANTS = 3};
这不再是一个好主意吗?
我看到了更喜欢枚举类的充分理由(传统枚举隐式转换为 int;传统枚举将其枚举数导出到周围范围),但在这种情况下,这些是更喜欢旧枚举的原因。
我在static constexpr int vs old-fashioned enum的线程中看到,旧式枚举更好,因为使用静态 constexpr 成员,您还必须在类之外声明它。但这显然在 C++17 中不再适用,并且可能只适用于类成员。
c ++ 17中的首选方式是什么?
解决方案
这是主观的。
然而,这始终是对枚举的滥用。你没有枚举任何东西;您只是在窃取该enum
功能以获取一些与任意整数值无关的值,这些值并不打算具有自己的逻辑“类型”。
这就是为什么enum class
在这里也不合适的原因(因为,正如您所指出的,它enum class
强制执行enum
应该存在但您实际上并不想要的属性)。
由于 不再有任何问题static constexpr int
,我会使用它(或constexpr inline int
,或本周的任何内容)。
推荐阅读
- python - 在 Pycharm 中使用 iCloud 作为工作目录
- php - $.ajax 为数据返回 [object Object] (WordPress)
- c# - 获取所有列计数并将数字存储在变量中
- python - 删除和读取小部件后的 KivyMD MDList 间距布局问题
- postgresql - pgcrypto:无法正常用户
- list - 如何创建一个包含一个元素但具有给定深度的列表?
- react-native - 反应原生深层链接不需要的组件渲染,即使有清理功能
- r - 使用 dplyr 从 R 数据框中的最后一列最后一行更改值
- xml - 是否可以使用 XSLT 仅获取层次结构的特定分支?
- function - Access查询和函数中的动态字段名,可以这样吗?