【发布时间】:2021-05-24 10:19:50
【问题描述】:
请注意,这是一个关于 C++ 语言的问题,而不是关于我用来说明它的示例的真实性或有用性。
假设我们在一个(或多个)命名空间中有一个enum:
namespace SomeVeryLargeNamespaceExample {
enum class E {
One,
Two,
};
}
现在,我们想在switch 语句的表达式中使用它。今天发现可以在switch语句中添加using SomeVeryLargeNamespaceExample::E,在第一个case之前,减少cases中的代码混乱:
switch (e) {
using SomeVeryLargeNamespaceExample::E;
case E::One:
std::cout << "One\n";
break;
case E::Two:
std::cout << "Two\n";
break;
}
乍一看还以为是某种从未了解过的“在任何case语句之前执行此操作”功能,但是有些表达式,例如函数调用,并没有执行(实际上,gcc会生成警告@987654330 @)。另一方面,可以声明变量(但不能初始化)。
我的问题是,还有哪些可能的说法?这是switch 的设计方式的一个功能还是仅仅是一个后果?
注意:我找到了this other question,但它是特定于 C 的(所以它没有提到命名空间的情况,例如),我对 C++ 很好奇。
【问题讨论】:
标签: c++ switch-statement