gpt4 book ai didi

c++ - 在 switch 语句中从 int 到 enum 类的隐式转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:53 34 4
gpt4 key购买 nike

enum class pid
{
Alpha, Beta, Gamma
};

int main()
{
int propId = 2;
switch(propId)
{
case pid::Alpha:
case pid::Beta:
case pid::Gamma:
break;
}
}

以上片段在 msvc2012 中编译良好(并且有效)但在 clang-3.4 和 g++-4.8 中失败。这些需要 static_cast<pid>(propId)在 switch 子句中使用。

顺便说一下,没有显式转换的简单赋值,例如 pid a = propId;在每个编译器中给出错误。

谁做对了?

最佳答案

标准第 4 条,“标准转换”,仅列出无作用域枚举。因此,强枚举有任何标准转换,您必须在任一方向使用static_cast

您可能会争辩说,这种明确性是强枚举的全部意义所在。它们不是一蹴而就的整数,而是需要明确的意图声明。请注意 [谢谢,@DyP] switch 语句明确支持强枚举并且不需要需要手动转换为某种整数类型。

关于c++ - 在 switch 语句中从 int 到 enum 类的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870403/

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