转发声明枚举为 class 成员变量

Forward declared enum as class member variable

作为前向声明的经验法则(来自 "API Design for C++",第 214 页),如果我:

,我只包含 class 的 header

在所有其他情况下,我只是转发声明 class。

不过,我最近不小心用了一个class一个forward declared enum class的数据成员,然后编译了。

这确实可以使用,还是只是一个意外的黑客攻击(我实际上需要 header 和 MyEnum 的定义)?

// test.hpp
enum class MyEnum;

class A {
    MyEnum myenum;
};

前向声明的枚举 class 具有指定的基础类型。如果未明确指定,则为 int。因为枚举的存储大小是已知的,即使它只是向前声明,所以将它用作成员不是问题。