正向声明的枚举,默认值以.h为单位
Forward declared enum, default value in .h
类型.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的编译器,您可以使用它为您的成员提供默认的成员初始值设定项。否则,强制转换是为整数中的枚举提供初始值设定项的唯一方法。
相关文章:
- Switch 语句(字符串)一直选择默认值,除非其为零
- 编写以 C++ 为单位返回值的函数
- 如何使用默认值将枚举声明为 extern
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在 c++ 中使用默认值将 std::set 转换为 std::map
- 为什么 std::move 不将默认移动构造函数中的源变量更改为默认值?
- 为什么无法在可变参数模板中将尾随模板参数指定为默认值?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- 如何将MacOS默认值从clang更改为自制gcc
- 正向声明的枚举,默认值以.h为单位
- 将"50.0"设置为默认值而不是"50"
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 提升灵气整数,默认值为文字
- 为什么不能使用"( )"为类的非静态数据成员提供默认值?
- 当 n 的默认值为字符串长度时,如何反转字符串中的 n 个字符
- Visual Studio 编译器默认值为 /o
- 以 nm 符号值为单位的偏移量
- 函数参数的默认值为 "passing_parametr" *2
- 以字符为键的数组,默认值为0