你能为 C++ 中失败的转换分配一个默认枚举值吗?

Ric*_*ick 1 c++ enums

我想知道是否可以为 C++ 中的枚举分配默认值?也就是说,如果我们尝试将一个值转换为这个特定的枚举,并且该值不存在,则让它返回一个默认的枚举值...

enum ExampleEnum : int
{
    DefaultValue = 0,
    Value1 = 1,
    Value2 = 2;
};

// I want this to return 0 (DefaultValue) as the value (3) is not defined in ExampleEnum.
const ExampleEnum invalid_enum = static_cast<ExampleEnum>(3);
Run Code Online (Sandbox Code Playgroud)

use*_*522 5

不,没有这样的内置功能,您不能影响它将static_cast<ExampleEnum>执行的操作。当然,您可以自己编写一个函数,该函数将通过事先检查值来执行转换,并使用它来代替static_cast.

但还要注意,强制转换static_cast<ExampleEnum>(3)是有效的,并且这3是枚举类型的允许值。具有固定基础类型的枚举(例如,具有像您一样显式指定的类型的枚举)将其基础类型的所有值作为有效值。

枚举定义中的命名枚举器只是值子集的别名。在这种情况下,它们不会影响可能值的范围。

(但请注意,这对于没有固定基础类型的枚举是不同的。)