CppCoreGuidelines Enum.4 为了安全且简单的使用,基于枚举值定义操作
02 February 2023
“Define operations on enumerations for safe and simple use”
理由
使用习惯,避免错误。
例子
enum class Day { mon, tue, wed, thu, fri, sat, sun }; Day& operator++(Day& d) { return d = (d == Day::sun) ? Day::mon : static_cast<Day>(static_cast<int>(d)+1); } int main() { Day today = Day::sat; Day tomorrow = ++today; cout << static_cast<int>(tomorrow); }
6
这里用了statc_cast
看起来不太优美。但是:
Day& operator++(Day& d) { return d = (d == Day::sun) ? Day::mon : Day{++d}; // error }
这里++
的使用,会导致无限递归。要么使用 switch
实现,但这样代码又太多。
强化
- 标记重复的转换回枚举的表达式。