我看到了一个奇怪的代码片段(见下文)。 ): 使用 C++11 及更高版本的 C++11 时,此代码片段是否存在任何潜在问题?上述代码片段确实可以通过 gcc 编译并运行良好。
#include <iostream>
#include <array>
#include <algorithm>
int main() {
switch (1) {
default:
std::cout << "in default" << std::endl;
break;
case (1):
std::cout << "in case 1" << std::endl;
break;
}
return 0;
}
案例标签可以按任何顺序出现。选择一个使您的代码最容易理解的顺序。如果您的
default
案例是致命错误(例如,因为您想在运行时捕获丢失的案例),那么将其放在顶部以声明开关“意图详尽”也可能会很好。
switch
的语义是您跳转到相关案例,因此您可以使用它来做任何您喜欢的事情。如果您在每个案例结束时break
,则案例顺序并不重要,但如果您允许流入下一个案例,那么顺序当然很重要。尽管有时它可能会有所帮助(并且可以使用 [[fallthrough]]
属性在代码中清楚地表明其意图),但通常认为失败是微妙且意外的。