请注意,这是关于C++语言的问题,而不是关于我提供的示例有多真实或有用的问题。
假设我们在一个命名空间(或多个命名空间)中有一个枚举类型:
现在,我们希望在
乍一看,我以为这是一种“在任何情况语句之前执行此操作”的功能,但某些表达式(如函数调用)不会被执行(实际上,gcc生成警告
我的问题是,还有哪些语句是可能的?这是一项功能还是仅是switch设计的结果? 注意:我发现this other question,但它只适用于C(因此没有提到命名空间case,例如),而我对C++很感兴趣。
假设我们在一个命名空间(或多个命名空间)中有一个枚举类型:
namespace SomeVeryLargeNamespaceExample {
enum class E {
One,
Two,
};
}
现在,我们希望在
switch
语句的表达式中使用它。今天我发现可以在第一个case
之前在switch
语句中添加using SomeVeryLargeNamespaceExample::E
,从而减少case
中的代码混乱。switch (e) {
using SomeVeryLargeNamespaceExample::E;
case E::One:
std::cout << "One\n";
break;
case E::Two:
std::cout << "Two\n";
break;
}
乍一看,我以为这是一种“在任何情况语句之前执行此操作”的功能,但某些表达式(如函数调用)不会被执行(实际上,gcc生成警告
statement will never be executed [-Wswitch-unreachable]
)。另一方面,变量声明是可能的(但不是初始化)。我的问题是,还有哪些语句是可能的?这是一项功能还是仅是switch设计的结果? 注意:我发现this other question,但它只适用于C(因此没有提到命名空间case,例如),而我对C++很感兴趣。
do {
放在第一个case
之前。 - Eljay