gpt4 book ai didi

c++ - 转发声明的枚举,.h 中的默认值

转载 作者:行者123 更新时间:2023-11-28 04:35:12 24 4
gpt4 key购买 nike

类型.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 到枚举的隐式转换。因此,你不能 copy-initialize (使用 =)来自 int 的枚举。所以即使这样

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

MyEnum e = -1;

会产生同样的错误。您可以添加类型转换,或切换到 direct-initialization (在这里,强制转换也是一种形式):

MyEnum e{-1};

上面直接初始化了变量,但遗憾的是仅从 C++17 开始。在我们的特定情况下,您可以使用它来提供 default member initializer对于您的成员(member),如果您可以使用支持 C++17 的编译器。否则,强制转换是为整数枚举提供初始值设定项的唯一方法。

关于c++ - 转发声明的枚举,.h 中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51653014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com