正向声明的枚举,默认值以.h为单位

Forward declared enum, default value in .h

本文关键字:默认值 为单位 枚举 声明      更新时间:2023-10-16

类型.h:

enum MyEnum : int8
{
invalid = -1,
valid = 0,
}
class TestClass 
{ ... default stuff ...}

MyOtherHeader.h:

enum MyEnum : int8;
class TestClass;
class MyClass
{
MyEnum Val = -1;
TestClass* MyObj= nullptr;
}

为什么我们可以将null分配给前向声明的类指针,而不能将已定义的enum底层类型的值分配给已转发声明的值?

难道编译器不应该正确地"推导"出来吗?

TLDR:问题是:为什么我们需要一个变通方法来为前向声明的枚举属性分配默认值?

没有从int到枚举的隐式转换。因此,您不能从int复制初始化(使用=(枚举

enum MyEnum : int8
{
invalid = -1,
valid = 0,
};
MyEnum e = -1;

会产生同样的错误。您可以添加强制转换,也可以切换到直接初始化(强制转换也是一种形式,在这里(:

MyEnum e{-1};

上面的直接初始化变量,尽管遗憾的是,这只是因为C++17。在我们的特殊情况下,如果您可以使用支持C++17的编译器,您可以使用它为您的成员提供默认的成员初始值设定项。否则,强制转换是为整数中的枚举提供初始值设定项的唯一方法。