gpt4 book ai didi

c++ - 切换枚举类的所有项目时的默认案例编译

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

为什么下面的开关甚至编译默认情况,因为它涵盖了枚举类的所有项目?我本以为这就是首先拥有强大的 enum class 的原因。

至于为什么即使我知道我涵盖了所有情况,我还是希望有一个默认值:这可以保护我免受 future 粗心大意(以及其他同事的粗心)

enum class E {
a,
b
};

int main()
{
E c = E::b;
switch (c) {
case E::a:
case E::b:
std::cout << "pass" << std::endl;
break;
default:
static_assert(false, "This explodes!");
}
}

Proof

最佳答案

因为编译无法知道是否有人将非法值强制转换为枚举类型。考虑:

E c = static_cast<E>( 42 );

Actor 将在没有警告(甚至错误)的情况下编译,因为您明确告诉编译器“我知道我在做什么,不要检查值”。实际上,不幸的是,这种情况比您想象的更频繁地发生。 :(

此外,所有代码都必须是有效的,即使它后来因无法访问而被删除。 static_assert(false,...) 将在编译时触发,与运行时发生的情况无关。

关于c++ - 切换枚举类的所有项目时的默认案例编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15473298/

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